码迷,mamicode.com
首页 > 编程语言 > 详细

Java框架spring Boot学习笔记(十三):aop实例操作

时间:2017-11-08 19:55:20      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:conf   分享   hello   code   lis   aspect   位置   encoding   XML   

使用aop需要在网上下载两个jar包:

  1. aopalliance.jar
  2. aspectjweaver.jar

为idea添加jar包,快捷键ctrl+shift+alt+s,打开添加jar包的对话框,将刚才下载好的jar添加进去

技术分享

 

前置增强实例

编写TimeHandler.java

1 package com.example.spring;
2 
3 public class TimeHandler {
4     public void beforTime()
5     {
6         System.out.println("前置增强:CurrentTime = " + System.currentTimeMillis());
7     }
8 }

编写HelloWorld.java

1 package com.example.spring;
2 
3 public class HelloWorld {
4     public void printHello(){
5         System.out.println("Hello Aop.");
6     }
7 }

 编写配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
 7         http://www.springframework.org/schema/aop
 8         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
 9 
10     <!-- bean definition & AOP specific configuration -->
11     <!-- 1 配置对象-->
12     <bean id="helloWorld" class="com.example.spring.HelloWorld"/>
13     <bean id="timeHandler" class="com.example.spring.TimeHandler"/>
14     
15     <!-- 2 配置aop操作-->
16     <aop:config>
17         <!-- 2.1 配置切入点-->
18         <!-- 设置切入点id为pointcut1 -->
19         <aop:pointcut id="pointcut1" expression="execution(* com.example.spring.HelloWorld.*(..))"/>
20 
21         <!-- 2.2 配置切面-->
22         <aop:aspect ref="timeHandler">
23             <!-- 配置前置增强类型 ,method:增强类()里面的方法(beforTime())作为前置-->
24             <!-- pointcut-ref设置为切入点的id:pointcut1 -->
25             <aop:before method="beforTime" pointcut-ref="pointcut1"/>
26         </aop:aspect>
27     </aop:config>
28 </beans>

编写Application.java

 1 package com.example.spring;
 2 
 3 import org.springframework.context.support.AbstractApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 
 6 public class Application {
 7     public static void main(String[] args) {
 8         //bean配置文件所在位置 D:\\IdeaProjects\\spring\\src\\Beans.xml
 9         //使用AbstractApplicationContext容器
10         AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\\IdeaProjects\\spring\\src\\aop.xml");
11         //得到配置创建的对象
12         HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
13         helloWorld.printHello();
14     }
15 }

运行输出

前置增强:CurrentTime = 1510134673408
Hello Aop.

可以看到,打印Hello Aop.之前会先打印当前的时间CurrentTime = 1510132664923。

 

后置增强实例

修改TimeHandler.java

 1 package com.example.spring;
 2 
 3 import org.aspectj.lang.ProceedingJoinPoint;
 4 
 5 public class TimeHandler {
 6     public void beforTime()
 7     {
 8         System.out.println("前置增强:CurrentTime = " + System.currentTimeMillis());
 9     }
10 
11     public void afterTime()
12     {
13         System.out.println("后置增强:CurrentTime = " + System.currentTimeMillis());
14     }
15 }

 修改配置文件aop.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
 7         http://www.springframework.org/schema/aop
 8         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
 9 
10     <!-- bean definition & AOP specific configuration -->
11     <!-- 1 配置对象-->
12     <bean id="helloWorld" class="com.example.spring.HelloWorld"/>
13     <bean id="timeHandler" class="com.example.spring.TimeHandler"/>
14     
15     <!-- 2 配置aop操作-->
16     <aop:config>
17         <!-- 2.1 配置切入点-->
18         <!-- 设置切入点id为pointcut1 -->
19         <aop:pointcut id="pointcut1" expression="execution(* com.example.spring.HelloWorld.*(..))"/>
20 
21         <!-- 2.2 配置切面-->
22         <aop:aspect ref="timeHandler">
23             <!-- 配置前置增强类型 method:增强类()里面的方法(beforTime())作为前置-->
24             <!-- pointcut-ref设置为切入点的id:pointcut1 -->
25             <!--<aop:before method="beforTime" pointcut-ref="pointcut1"/>-->
26 
27             <!-- 配置后置增强类型 method:增强类()里面的方法(afterTime())作为后置-->
28             <!-- pointcut-ref设置为切入点的id:pointcut1 -->
29             <aop:after method="afterTime" pointcut-ref="pointcut1"/>
30         </aop:aspect>
31     </aop:config>
32 </beans>

运行输出

Hello Aop.
后置增强:CurrentTime = 1510134850754

 

环绕增强实例

修改TimeHandler.java

 1 package com.example.spring;
 2 
 3 import org.aspectj.lang.ProceedingJoinPoint;
 4 
 5 public class TimeHandler {
 6     public void beforTime()
 7     {
 8         System.out.println("前置增强:CurrentTime = " + System.currentTimeMillis());
 9     }
10 
11     public void afterTime()
12     {
13         System.out.println("后置增强:CurrentTime = " + System.currentTimeMillis());
14     }
15 
16     public void aroundTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
17         //方法之前
18         System.out.println("环绕增强:CurrentTime = " + System.currentTimeMillis());
19 
20         //执行被增强的方法
21         proceedingJoinPoint.proceed();
22 
23         //方法之后
24         System.out.println("环绕增强:CurrentTime = " + System.currentTimeMillis());
25     }
26 
27 }

修改aop.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
 7         http://www.springframework.org/schema/aop
 8         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
 9 
10     <!-- bean definition & AOP specific configuration -->
11     <!-- 1 配置对象-->
12     <bean id="helloWorld" class="com.example.spring.HelloWorld"/>
13     <bean id="timeHandler" class="com.example.spring.TimeHandler"/>
14     
15     <!-- 2 配置aop操作-->
16     <aop:config>
17         <!-- 2.1 配置切入点-->
18         <!-- 设置切入点id为pointcut1 -->
19         <aop:pointcut id="pointcut1" expression="execution(* com.example.spring.HelloWorld.*(..))"/>
20 
21         <!-- 2.2 配置切面-->
22         <aop:aspect ref="timeHandler">
23             <!-- 配置前置增强类型 method:增强类()里面的方法(beforTime())作为前置通知-->
24             <!-- pointcut-ref设置为切入点的id:pointcut1 -->
25             <!--<aop:before method="beforTime" pointcut-ref="pointcut1"/>-->
26 
27             <!-- 配置后置增强类型 method:增强类()里面的方法(afterTime())作为后置通知-->
28             <!-- pointcut-ref设置为切入点的id:pointcut1 -->
29             <!--<aop:after method="afterTime" pointcut-ref="pointcut1"/>-->
30 
31             <!-- 配置环绕增强类型 method:增强类()里面的方法(aroundTime())作为环绕通知-->
32             <!-- pointcut-ref设置为切入点的id:pointcut1 -->
33             <aop:around method="aroundTime" pointcut-ref="pointcut1"/>
34         </aop:aspect>
35     </aop:config>
36 </beans>

运行输出

环绕增强:CurrentTime = 1510135559066
Hello Aop.
环绕增强:CurrentTime = 1510135559074

 

之后就不用修改源程序,只需通过调整配置文件,就可以调整程序的逻辑。

 

Java框架spring Boot学习笔记(十三):aop实例操作

标签:conf   分享   hello   code   lis   aspect   位置   encoding   XML   

原文地址:http://www.cnblogs.com/zylq-blog/p/7805203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!