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包的版本太低了。

posted @ 2016-11-17 18:04  小琪子  阅读(192)  评论(0)    收藏  举报