當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring之AOP实现
生活随笔
收集整理的這篇文章主要介紹了
Spring之AOP实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 前言
- 環(huán)境搭建
- 前置業(yè)務(wù)類編寫
- 一、注解實(shí)現(xiàn)AOP
- 1.編寫注解實(shí)現(xiàn)的增強(qiáng)類
- 2.在Spring配置文件中,注冊(cè)bean,并增加支持注解的配置
- 3.測(cè)試
- 二、配置文件實(shí)現(xiàn)AOP
- 1.編寫自定義增強(qiáng)類
- 2.Spring配置文件中,注冊(cè)bean,配置增強(qiáng)
- 2.測(cè)試
- 總結(jié)
前言
AOP(Aspect Oriented Programming)稱為面向切面編程,在程序開發(fā)中主要用來解決一些系統(tǒng)層面上的問題,比如日志,事務(wù),權(quán)限等待。
環(huán)境搭建
1、pom.xml 配置AOP依賴
<!-- AOP 依賴--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.4</version></dependency>2、Spring配置文件的命名空間中加入aop頭文件
<beans xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">前置業(yè)務(wù)類編寫
1、Admin的service
package com.ex.service;public interface IAdminService {public void saveAdmin(String name); } package com.ex.service.impl;@Service public class adminServiceImpl implements IAdminService {@Overridepublic void saveAdmin(String name) {System.out.println("save admin method");} }2、user的service
package com.ex.service;public interface IUserService {public void selectUser(int id); } package com.ex.service.impl;@Service public class userServiceImpl implements IUserService {@Overridepublic void selectUser(int id) {System.out.println("user select method");} }一、注解實(shí)現(xiàn)AOP
1.編寫注解實(shí)現(xiàn)的增強(qiáng)類
@Component @Aspect public class LogAdvice {// springaop自動(dòng)的5種aop這里全部列出// *返回類型,包名,*類名,*方法名,(..)任何參數(shù)@Before("execution(* com.ex.service.impl.*.*(..))")public void before(){System.out.println("---------方法執(zhí)行前before()---------");}@After("execution(* com.ex.service.impl.*.*(..))")public void after(){System.out.println("---------方法執(zhí)行后after()---------");}@AfterReturning("execution(* com.ex.service.impl.*.*(..))")public void afterReturning(){System.out.println("---------方法返回后afterReturning()---------");}@Around("execution(* com.ex.service.impl.*.*(..))")public void around(ProceedingJoinPoint jp) throws Throwable {System.out.println("-------環(huán)繞前-------");System.out.println("簽名(拿到方法名):"+jp.getSignature());//執(zhí)行目標(biāo)方法proceedObject proceed = jp.proceed();System.out.println("-------環(huán)繞后------");System.out.println(proceed);}@AfterThrowing("execution(* com.xinzhi.service.impl.*.*(..))")public void afterThrow() {System.out.println("--------------有異常發(fā)生-----------------" + new Date());} }2.在Spring配置文件中,注冊(cè)bean,并增加支持注解的配置
<!-- 掃包:如果使用了注解,需要在開始之前去掃包--><context:component-scan base-package="com.ex"/><!-- aop 注解實(shí)現(xiàn) 配置 --><aop:aspectj-autoproxy/>3.測(cè)試
@Testpublic void testAop(){userService.selectUser(1);System.out.println("--------------------------------");adminService.saveAdmin("aa");}結(jié)果
-------環(huán)繞前------- 簽名(拿到方法名):void com.ex.service.IUserService.selectUser(int) ---------方法執(zhí)行前before()--------- user select method -------環(huán)繞后------ null ---------方法執(zhí)行后after()--------- ---------方法返回后afterReturning()--------- -------------------------------- -------環(huán)繞前------- 簽名(拿到方法名):void com.ex.service.IAdminService.saveAdmin(String) ---------方法執(zhí)行前before()--------- save admin method -------環(huán)繞后------ null ---------方法執(zhí)行后after()--------- ---------方法返回后afterReturning()---------二、配置文件實(shí)現(xiàn)AOP
1.編寫自定義增強(qiáng)類
public class MyAOP {public void before(){System.out.println("---------執(zhí)行方法前打印日志--------------自定義");}public void after(){System.out.println("---------執(zhí)行方法后打印日志--------------自定義");} }2.Spring配置文件中,注冊(cè)bean,配置增強(qiáng)
<!--注冊(cè)bean--> <bean id="myAop" class="com.xinzhi.aop.MyAop"/><!--aop的配置--><aop:config><!-- ref 自定義切面類 --><aop:aspect ref="myAOP"><!-- 切入點(diǎn)配置 --><aop:pointcut id="pointcut1" expression="execution(* com.ex.service.impl.adminServiceImpl.*(..))"/><aop:pointcut id="pointcut2" expression="execution(* com.ex.service.impl.userServiceImpl.*(..))"/><!-- 織入 --><aop:before pointcut-ref="pointcut1" method="before"/><aop:after pointcut-ref="pointcut2" method="after"/></aop:aspect></aop:config>2.測(cè)試
@Testpublic void testAop2(){userService.selectUser(1);System.out.println("--------------------------------");adminService.saveAdmin("aa");}結(jié)果
user select method ---------執(zhí)行方法后打印日志--------------自定義 -------------------------------- ---------執(zhí)行方法前打印日志--------------自定義 save admin method總結(jié)
AOP就是對(duì)指定的一批的方法在其執(zhí)行過程中進(jìn)行一個(gè)統(tǒng)一的處理,將大量重復(fù)性的工作抽離了出來,省事!
總結(jié)
以上是生活随笔為你收集整理的Spring之AOP实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【TensorFlow】通过两个简单的例
- 下一篇: 美商务部再禁6项新兴技术,包括光刻软件和