首页 > 代码库 > Spring AspectJ 例子
Spring AspectJ 例子
1. Waiter目标类
1 package com.smart.aop.advice.pointcut; 2 3 public class Waiter { 4 5 public void greetTo(String name) { 6 System.out.println("Waiter greet to " + name + " ..."); 7 } 8 9 public void serverTo(String name) {10 System.out.println("waiter server to " + name + " ...");11 }12 }
2. 使用AspectJ注解定义切面
1 package com.smart.aop.advice.aspectj; 2 3 import org.aspectj.lang.annotation.Aspect; 4 import org.aspectj.lang.annotation.Before; 5 6 @Aspect 7 public class PreGreetingAspect { 8 9 @Before ("execution(* greetTo(..))") //定义连接点(连接点方位信息--前置增强, 切点--所有目标类的greetTo方法--可带任意的入参和返回值)10 public void beforeGreeting() { 11 System.out.println("How are you!"); //方法体为增强逻辑12 }13 }
3. 通过编程的方式织入切面,为Waiter生成织入了xxx切面的代理
1 package com.smart.aop.advice.aspectj; 2 3 import org.springframework.aop.aspectj.annotation.AspectJProxyFactory; 4 import org.testng.annotations.Test; 5 import com.smart.aop.advice.pointcut.Waiter; 6 7 8 public class AspectJProxyTest { 9 10 @Test11 public void beforeTest() {12 13 Waiter waiter = new Waiter();14 AspectJProxyFactory pFactory = new AspectJProxyFactory();15 16 pFactory.setTarget(waiter); //设置目标实例17 pFactory.addAspect(PreGreetingAspect.class); //添加切面类18 19 Waiter proxyWaiter = pFactory.getProxy(); //生成织入代理的代理对象20 21 /**22 * 由切面类中的切点信息execution(* greetTo(..))23 * 可知代理对象proxyWaiter的greetTo方法织入了切面类所定义的增强逻辑24 */25 proxyWaiter.greetTo("Jack"); 26 proxyWaiter.serverTo("Jack");27 }28 }
输出结果:
How are you!
Waiter greet to Jack ...
waiter server to Jack ...
4. 通过Spring配置方式织入切面
1)xml 配置
1 <!-- 匹配切点的目标bean -->2 <bean id="waiter" class="com.smart.aop.advice.pointcut.Waiter" />3 4 <!-- 使用@AspectJ标注的切面类 -->5 <bean class="com.smart.aop.advice.aspectj.PreGreetingAspect" />6 7 <!-- 自动代理创建器,能够将@AspectJ标注的切面自动织入到目标bean中 -->8 <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
2)测试
1 package com.smart.aop.advice.aspectj; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 import org.testng.annotations.Test; 6 7 import com.smart.aop.advice.pointcut.Waiter; 8 9 public class SpringAspectJTest {10 11 12 @Test13 public void beforeTest() {14 15 16 ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:com/smart/aop/advice/aspectj/beans-aspectj.xml");17 Waiter waiter = ctx.getBean("waiter", Waiter.class);18 19 waiter.greetTo("Jack");20 waiter.serverTo("Jack");21 }22 }
Spring AspectJ 例子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。