Spring 注解式Aop 入门
首先在spring配置文件中加上
xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
然后在配置文件中开启aop
<aop:aspectj-autoproxy /> <context:component-scan base-package="com.test"></context:component-scan>
定义bean
package com.test;
import org.springframework.stereotype.Component;
@Component("SpringTest")
public class SpringTest{
public void PrintHello(String name){
System.out.println("Hello," + name);
}
public void save(String name){
System.out.println("我是save()方法...");
}
public void update(String name){
System.out.println("我是update()方法...");
}
public void search(String search){
System.out.println("我是search()方法...");
}
}
然后定义切面
package com.test;
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;
/**
* 定义切面
* @author John
*
*/
@Aspect
@Component("Aspject")
public class Aspject {
//定义切点
@Pointcut("execution(* com.test.SpringTest.update(..))")
private void anyMethod(){}
//定义前置通知
@Before("anyMethod() && args(name)")
public void BeforeTongZhi(String name){
System.out.println("我是前置通知.....");
}
@After("anyMethod()")
public void after(){
System.out.println("最终通知");
}
}
测试类
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext.xml");
SpringTest test = (SpringTest) cxt.getBean("SpringTest");
test.update("zhangsan");
}
}
运行结果
我是前置通知..... 我是update()方法... 最终通知
期间遇到一个错误
error at ::0 can't find referenced pointcut anyMethod
是aspectjrt jar包的版本太低了。

浙公网安备 33010602011771号