SpringAOP, 面向切面编程,是Spring的一大特色之一,掌握切面编程,实际体验一把。
1. 引入jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
依赖四个jar包。最基本的,缺一不可。
2. 配置文件打开aop配置。
<!--打开aop -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
3. 定义切面类。
package cn.jim.java.aop;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class springAOP {
//定义切入点表达式
@Pointcut("execution(* cn..*.*(..))")
public void pt(){
}
@Before("pt()")
public void begin(){
System.out.println("我开始了");
}
@After("pt()")
public void end(){
System.out.println("我结束了");
}
}
切入点表达式 * cn..*.*(..)
第一个*表示任意返回值的方法,如果想指定入void返回值,可以写作 void cn..*.*(..)
cn..*表示cn包及子包中的类。cn.*表示cn包中的类。
*(..)表示任意方法的执行。
切入点
@Before, @After, 切入点,指代方法执行前,执行后。
4. 测试
利用之前写的webservice接口
public void sayHello(String request) {
// TODO Auto-generated method stub
System.out.println(request);
}
发送一个请求,得到打印内容:
我开始了
{"say":"hello"}
我结束了
参考大神的博客: