當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring 注解AOP
生活随笔
收集整理的這篇文章主要介紹了
Spring 注解AOP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、導包
2、編寫切面類,在切面類上直接使用AOP注解
packagestar.july.e_spring_aop_annotation; importorg.aspectj.lang.ProceedingJoinPoint; importorg.aspectj.lang.annotation.After; importorg.aspectj.lang.annotation.Around; importorg.aspectj.lang.annotation.Aspect; importorg.aspectj.lang.annotation.Before; //使用注解AOP @Aspect//代表一個切面類 publicclassMyAspect { ??????????/** ?????????? * 常用的通知類: ?????????? *?? 前置通知: 在目標對象的連接點之前調用 ?????????? *?? 后置通知:在目標對象的連接點之后調用 ?????????? *?? 環繞通知: 在目標對象的連接點之前與之后調用 ?????????? */ ?????????? ??????????@Before(value = "execution(* star.july.*.UserDao.*())") ??????????publicvoidbefore(){ ???????????????????System.out.println("開啟事務"); ??????????} ?????????? ??????????//定義后置通知 ??????????@After(value = "execution(* star.july.*.UserDao.update())") ??????????publicvoidafter(){ ???????????????????System.out.println("結束事務"); ??????????} ?????????? ??????????//環繞通知 ??????????@Around(value = "execution(* star.july.*.UserDao.*())") ??????????publicvoidround(ProceedingJoinPoint jp)throwsThrowable{ ???????????????????System.out.println("環繞通知前面代碼"); ??????????????????? ???????????????????//執行目標對象的核心方法 ???????????????????jp.proceed();//執行連接點方法 ??????????????????? ???????????????????System.out.println("環繞通知后面代碼"); ??????????} ?????????? ?????????? }
3、編寫dao類
packagestar.july.e_spring_aop_annotation; publicclassUserDao{ ??????????//調用業務方法 ??????????publicvoidsave(){ ???????????????????System.out.println("調用save方法"); ??????????} ?????????? ??????????publicvoidupdate(){ ???????????????????System.out.println("調用update方法"); ??????????} }
4、配置
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" ???xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???xmlns:aop="http://www.springframework.org/schema/aop" ???xsi:schemaLocation="http://www.springframework.org/schema/beans ??????? http://www.springframework.org/schema/beans/spring-beans.xsd ??????? http://www.springframework.org/schema/aop ??????? http://www.springframework.org/schema/aop/spring-aop.xsd"> ??????????<!-- 1.創建目標對象 --> ??????????<beanid="userDao"class="star.july.e_spring_aop_annotation.UserDao"></bean> ?????????? ??????????<!-- 2.創建切面類對象 --> ??????????<beanid="myaspect"class="star.july.e_spring_aop_annotation.MyAspect"></bean> ?????????? ??????????<!-- 注意:注解方式必須開啟自動創建代理類配置 --> ??????????<aop:aspectj-autoproxy></aop:aspectj-autoproxy> ??? ? ? ??????? </beans>
5、測試
package star.july.e_spring_aop_annotation;
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo { ? ? public static void main(String[] args) { ? ? ? ? ApplicationContext ac = new ClassPathXmlApplicationContext("/applicationContext.xml"); ? ? ? ? UserDao userDao = (UserDao)ac.getBean("userDao"); ? ? ? ? userDao.save(); ? ? ? ? userDao.update(); ? ? } }
可以參考上一篇文章,下方有鏈接
2、編寫切面類,在切面類上直接使用AOP注解
packagestar.july.e_spring_aop_annotation; importorg.aspectj.lang.ProceedingJoinPoint; importorg.aspectj.lang.annotation.After; importorg.aspectj.lang.annotation.Around; importorg.aspectj.lang.annotation.Aspect; importorg.aspectj.lang.annotation.Before; //使用注解AOP @Aspect//代表一個切面類 publicclassMyAspect { ??????????/** ?????????? * 常用的通知類: ?????????? *?? 前置通知: 在目標對象的連接點之前調用 ?????????? *?? 后置通知:在目標對象的連接點之后調用 ?????????? *?? 環繞通知: 在目標對象的連接點之前與之后調用 ?????????? */ ?????????? ??????????@Before(value = "execution(* star.july.*.UserDao.*())") ??????????publicvoidbefore(){ ???????????????????System.out.println("開啟事務"); ??????????} ?????????? ??????????//定義后置通知 ??????????@After(value = "execution(* star.july.*.UserDao.update())") ??????????publicvoidafter(){ ???????????????????System.out.println("結束事務"); ??????????} ?????????? ??????????//環繞通知 ??????????@Around(value = "execution(* star.july.*.UserDao.*())") ??????????publicvoidround(ProceedingJoinPoint jp)throwsThrowable{ ???????????????????System.out.println("環繞通知前面代碼"); ??????????????????? ???????????????????//執行目標對象的核心方法 ???????????????????jp.proceed();//執行連接點方法 ??????????????????? ???????????????????System.out.println("環繞通知后面代碼"); ??????????} ?????????? ?????????? }
3、編寫dao類
packagestar.july.e_spring_aop_annotation; publicclassUserDao{ ??????????//調用業務方法 ??????????publicvoidsave(){ ???????????????????System.out.println("調用save方法"); ??????????} ?????????? ??????????publicvoidupdate(){ ???????????????????System.out.println("調用update方法"); ??????????} }
4、配置
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" ???xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ???xmlns:aop="http://www.springframework.org/schema/aop" ???xsi:schemaLocation="http://www.springframework.org/schema/beans ??????? http://www.springframework.org/schema/beans/spring-beans.xsd ??????? http://www.springframework.org/schema/aop ??????? http://www.springframework.org/schema/aop/spring-aop.xsd"> ??????????<!-- 1.創建目標對象 --> ??????????<beanid="userDao"class="star.july.e_spring_aop_annotation.UserDao"></bean> ?????????? ??????????<!-- 2.創建切面類對象 --> ??????????<beanid="myaspect"class="star.july.e_spring_aop_annotation.MyAspect"></bean> ?????????? ??????????<!-- 注意:注解方式必須開啟自動創建代理類配置 --> ??????????<aop:aspectj-autoproxy></aop:aspectj-autoproxy> ??? ? ? ??????? </beans>
5、測試
package star.july.e_spring_aop_annotation;
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Demo { ? ? public static void main(String[] args) { ? ? ? ? ApplicationContext ac = new ClassPathXmlApplicationContext("/applicationContext.xml"); ? ? ? ? UserDao userDao = (UserDao)ac.getBean("userDao"); ? ? ? ? userDao.save(); ? ? ? ? userDao.update(); ? ? } }
可以參考上一篇文章,下方有鏈接
總結
以上是生活随笔為你收集整理的Spring 注解AOP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring整合Hibernate和St
- 下一篇: Spring中的简单实现AOP小例子