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     @Test
11     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     @Test
13     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 }
时间: 2024-10-20 04:23:33

Spring AspectJ 例子的相关文章

Spring @AspectJ 实现AOP 入门例子(转)

AOP的作用这里就不再作说明了,下面开始讲解一个很简单的入门级例子. 引用一个猴子偷桃,守护者守护果园抓住猴子的小情节. 1.猴子偷桃类(普通类): Java代码   package com.samter.common; /** * 猴子 * @author Administrator * */ public class Monkey { public void stealPeaches(String name){ System.out.println("[猴子]"+name+&quo

Spring AspectJ的Execution表达式-备忘笔记

Aspectj切入点语法定义 在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式  execution (* com.sample.service.impl..*.*(..)) execution()是最常用的切点函数,其语法如下所示: 整个表达式可以分为五个部分: 1.execution(): 表达式主体. 2.第一个*号:表示返回类型,*号表示所有的类型. 3.包名:表示需要拦截的包名,后面的两个

spring AspectJ AOP

1.开启对spring AspectJ风格切面的支持 2.扫描注解的bean 3.声明切面@Aspect 4.声明切入点@Pointcut(value="",argNames="") 5.声明通知@Before @After @AfterReturning @AfterThrowing @Around @Before 前置通知 目标方法运行前织入 @After 后置通知 目标方法后织入 @AfterReturning 后置返回通知 目标方法返回后织入 @AfterT

一个简单的Spring定时器例子 注解方式

首先在applicationContext.xml中增加 文件头中增加一条 xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation 中增加一条 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd <beans xmlns:task=&quo

spring AspectJ的Execution表达式

在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点" 例如定义切入点表达式 execution(* com.sample.service.impl..*.*(..)) execution()是最常用的切点函数,其语法如下所示: 整个表达式可以分为五个部分: 1.execution(): 表达式主体. 2.第一个*号:表示返回类型,*号表示所有的类型. 3.包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,

spring小例子-springMVC+mybits整合的小例子

这段时间没更博,找房去了...   吐槽一下,自如太坑了...承诺的三年不涨房租,结果今年一看北京房租都在涨也跟着涨了... 而且自如太贵了,租不起了.. 突然有点理解女生找对象要房了..   搬家太受罪了... 今天更一下springMVC整合mybits形成最简单的网站demo. 大概效果就是这样的:左边是数据库查询结果,右边是页面访问结果: 首先,一个简单的springMVC小例子可以看这个http://www.cnblogs.com/xuejupo/p/5236448.html 这是在这

Spring aspectJ切面使用步骤

如何在spring aop中使用aspectJ 1:声明一个切面:如下: @Aspect  //切面注解 @Component //spring 实体类实例化注解 public class ErrorLog { //声明切点 @Pointcut("execution(* com.base.user.service.*.*(..))") public void service(){ } //执行方法: @AfterThrowing(pointcut="service()&quo

Spring AspectJ基于注解的AOP实现

对于AOP这种编程思想,很多框架都进行了实现.Spring就是其中之一,可以完成面向切面编程.然而,AspectJ也实现了AOP的功能,且实现方式更为简捷,使用更加方便,而且还支持注解式开发.所以,Spring又将AspectJ对于AOP的实现也引入到了自己的框架中.     在Spring中使用AOP开发时,一般使用AspectJ的实现方式. Spring的经典AOP配置方案  01.使用的是Aspectj第三方框架,实现了AOP思想  02.注解配置的AOP  03.纯POJO <aop:c

Spring AspectJ切入点语法详解

1.Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点: within:用于匹配指定类型内的方法执行: this:用于匹配当前AOP代理对象类型的执行方法:注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配: target:用于匹配当前目标对象类型的执行方法:注意是目标对象的类型匹配