當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring中的简单实现AOP小例子
生活随笔
收集整理的這篇文章主要介紹了
Spring中的简单实现AOP小例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先說一下相應的知識作鋪墊
Spring的AOP術語:
?????????1)連接點(JointPoint):目標對象的每個方法
??? 2)切入點(PontCut):切入了服務代碼的連接點
??? 3)通知(Advice):在切入點上面需要切入的服務代碼
??? 4)切面(Aspect/Advisor):在指定的切入點切入指定的通知形成切面
1、導入所需的jar包 Spring的IOC和AOP包
2、創建dao類
package star.july.d_spring_aop; import org.aspectj.lang.ProceedingJoinPoint; public class MyAspect { ??????????/** ?????????? * 常用的通知類: ?????????? *?? 前置通知: 在目標對象的連接點之前調用 ?????????? *?? 后置通知:在目標對象的連接點之后調用 ?????????? *?? 環繞通知: 在目標對象的連接點之前與之后調用 ?????????? */ ?????????? ??????????//定義前置通知 ??????????public void before(){ ???????????????????System.out.println("開啟事務"); ??????????} ?????????? ??????????//定義后置通知 ??????????public void after(){ ???????????????????System.out.println("結束事務"); ??????????} ?????????? ??????????//環繞通知 ??????????public void round(ProceedingJoinPoint jp) throws Throwable{ ???????????????????System.out.println("環繞通知前面代碼"); ??????????????????? ???????????????????//執行目標對象的核心方法 ???????????????????jp.proceed();//執行連接點方法 ??????????????????? ???????????????????System.out.println("環繞通知后面代碼"); ??????????} ?????????? ?????????? }
3、創建切面類
package star.july.d_spring_aop; public class MyAspect { ??????????/** ?????????? * 常用的通知類: ?????????? *?? 前置通知: 在目標對象的連接點之前調用 ?????????? *?? 后置通知:在目標對象的連接點之后調用 ?????????? *?? 環繞通知: 在目標對象的連接點之前與之后調用 ?????????? */ ?????????? ??????????//定義前置通知 ??????????public void before(){ ???????????????????System.out.println("開啟事務"); ??????????} }
4、配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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.創建目標對象 --> ??????????<bean id="userDao" class="star.july.d_spring_aop.UserDao"></bean> ?????????? ??????????<!-- 2.創建切面類對象 --> ??????????<bean id="myaspect" class="star.july.d_spring_aop.MyAspect"></bean> ?????????? ??????????<!-- 3.配置切面 --> ??????????<aop:config> ???????????????????<!-- ??????????????????????????????????????切面 ??????????????????????????????????????ref:關聯切面類對象 ??????????????????? --> ??????????????????? <aop:aspect ref="myaspect"> ??????????????????? ?????????<!-- ??????????????????? ??????????????????3.1切入點 ??????????????????? ??????????????????id:切入點的別名 ??????????????????? ??????????????????expression: 切入點表達式 :格式: execution(方法的返回值類型 方法名(包+類 ..:表示零個或一個以上)(方法中參數列表)) ??????????????????? ????????? --> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????? <aop:pointcut expression="execution(* star.july.d_spring_aop.UserDao.*(..))" id="myspt"/> ??????????????????? <!-- 3.2通知 --> ??????????????????? <!-- 前置通知 ??????????????????? ??????????????????method:切面類中的前置通知的方法名稱 ??????????????????? ??????????????????point-ref:需要關聯的切入點 ???????????????????? --> ???????????????????? <aop:before method="before" pointcut-ref="myspt"/> ???????????????????? <aop:after method="after" pointcut-ref="myspt"/> ???????????????????? <aop:around method="round" pointcut-ref="myspt"/> ???????????????????? </aop:aspect> </aop:config>?????? ??????? </beans>
5、測試 package star.july.d_spring_aop; 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(); ????} }
1、導入所需的jar包 Spring的IOC和AOP包
2、創建dao類
package star.july.d_spring_aop; import org.aspectj.lang.ProceedingJoinPoint; public class MyAspect { ??????????/** ?????????? * 常用的通知類: ?????????? *?? 前置通知: 在目標對象的連接點之前調用 ?????????? *?? 后置通知:在目標對象的連接點之后調用 ?????????? *?? 環繞通知: 在目標對象的連接點之前與之后調用 ?????????? */ ?????????? ??????????//定義前置通知 ??????????public void before(){ ???????????????????System.out.println("開啟事務"); ??????????} ?????????? ??????????//定義后置通知 ??????????public void after(){ ???????????????????System.out.println("結束事務"); ??????????} ?????????? ??????????//環繞通知 ??????????public void round(ProceedingJoinPoint jp) throws Throwable{ ???????????????????System.out.println("環繞通知前面代碼"); ??????????????????? ???????????????????//執行目標對象的核心方法 ???????????????????jp.proceed();//執行連接點方法 ??????????????????? ???????????????????System.out.println("環繞通知后面代碼"); ??????????} ?????????? ?????????? }
3、創建切面類
package star.july.d_spring_aop; public class MyAspect { ??????????/** ?????????? * 常用的通知類: ?????????? *?? 前置通知: 在目標對象的連接點之前調用 ?????????? *?? 后置通知:在目標對象的連接點之后調用 ?????????? *?? 環繞通知: 在目標對象的連接點之前與之后調用 ?????????? */ ?????????? ??????????//定義前置通知 ??????????public void before(){ ???????????????????System.out.println("開啟事務"); ??????????} }
4、配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="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.創建目標對象 --> ??????????<bean id="userDao" class="star.july.d_spring_aop.UserDao"></bean> ?????????? ??????????<!-- 2.創建切面類對象 --> ??????????<bean id="myaspect" class="star.july.d_spring_aop.MyAspect"></bean> ?????????? ??????????<!-- 3.配置切面 --> ??????????<aop:config> ???????????????????<!-- ??????????????????????????????????????切面 ??????????????????????????????????????ref:關聯切面類對象 ??????????????????? --> ??????????????????? <aop:aspect ref="myaspect"> ??????????????????? ?????????<!-- ??????????????????? ??????????????????3.1切入點 ??????????????????? ??????????????????id:切入點的別名 ??????????????????? ??????????????????expression: 切入點表達式 :格式: execution(方法的返回值類型 方法名(包+類 ..:表示零個或一個以上)(方法中參數列表)) ??????????????????? ????????? --> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????? <aop:pointcut expression="execution(* star.july.d_spring_aop.UserDao.*(..))" id="myspt"/> ??????????????????? <!-- 3.2通知 --> ??????????????????? <!-- 前置通知 ??????????????????? ??????????????????method:切面類中的前置通知的方法名稱 ??????????????????? ??????????????????point-ref:需要關聯的切入點 ???????????????????? --> ???????????????????? <aop:before method="before" pointcut-ref="myspt"/> ???????????????????? <aop:after method="after" pointcut-ref="myspt"/> ???????????????????? <aop:around method="round" pointcut-ref="myspt"/> ???????????????????? </aop:aspect> </aop:config>?????? ??????? </beans>
5、測試 package star.july.d_spring_aop; 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 注解AOP
- 下一篇: JSON与Struts2的结合使用