純java 使用spring的註解方式AOP

本文轉載於  http://blog.csdn.net/a352193394/article/details/7345860

做了很小的改動,可以直接運行,

1.引入 相關jar  有 aspectjrt.jar,aspectjweaver.jar 就行。

所有java文件放在同一個文件夾下。

package studio.aop.test;

public interface PersonServer {  
	  
    public void save(String name);  
    public void update(String name, Integer id);  
    public String getPersonName(Integer id);  
      
}  


一個接口實現類

package studio.aop.test;

import studio.aop.test.PersonServer;

public class PersonServiceBean implements PersonServer{  
      
    @Override  
    public void save(String name) {  
          
        System.out.println("我是save方法");  
    //  throw new RuntimeException();  
    }  
  
    @Override  
    public void update(String name, Integer id) {  
          
        System.out.println("我是update()方法");  
    }  
  
    @Override  
    public String getPersonName(Integer id) {  
          
        System.out.println("我是getPersonName()方法");  
        return "xxx";  
    }  
  
}  

使用Spring註解方式對這個Bean進行方法攔截

package studio.aop.test;

import org.aspectj.lang.ProceedingJoinPoint;  
import org.aspectj.lang.annotation.After;  
import org.aspectj.lang.annotation.AfterReturning;  
import org.aspectj.lang.annotation.AfterThrowing;  
import org.aspectj.lang.annotation.Around;  
import org.aspectj.lang.annotation.Aspect;  
import org.aspectj.lang.annotation.Before;  
import org.aspectj.lang.annotation.Pointcut;  
  
/** 
 * 切面 
 * @author Bird 
 * 
 */  
@Aspect  
public class MyInterceptor {  
    @Pointcut("execution(* studio.aop.test.*.*(..))")  
    private void anyMethod(){}//定義一個切入點  
      
    @Before("anyMethod() && args(name)")  
    public void doAccessCheck(String name){  
        System.out.println(name);  
        System.out.println("前置通知");  
    }  
      
    @AfterReturning("anyMethod()")  
    public void doAfter(){  
        System.out.println("後置通知");  
    }  
      
    @After("anyMethod()")  
    public void after(){  
        System.out.println("最終通知");  
    }  
      
    @AfterThrowing("anyMethod()")  
    public void doAfterThrow(){  
        System.out.println("例外通知");  
    }  
      
    @Around("anyMethod()")  
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{  
        System.out.println("進入環繞通知");  
        Object object = pjp.proceed();//執行該方法  
        System.out.println("退出方法");  
        return object;  
    }  
}  

springaop.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xmlns:aop="http://www.springframework.org/schema/aop"  
       xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
       http://www.springframework.org/schema/aop   
       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  
          
    <aop:aspectj-autoproxy/>  
    <bean id="personServiceBean" class="studio.aop.test.PersonServiceBean"/>  
    <bean id="myInterceptor" class="studio.aop.test.MyInterceptor"/>  
     
</beans>  

測試 文件

package studio.aop.test;
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
  
import studio.aop.test.PersonServer;

public class SpringAOPTest {
	public static void main(String[] args) {
		//啓動Spring容器
		ApplicationContext context = new ClassPathXmlApplicationContext("springaop.xml");
		//獲取service組件
		PersonServer service = (PersonServer) context.getBean("personServiceBean");
		//以普通的方式調用UserService對象的三個方法

		service.save("123");
		try {
			service.update("234",12);
		} catch (Exception e) {
			System.out.println("出錯信息");
		}
	}
	    

}
運行,得到如下結果:



   兩個簡單的小例子 下載地址 http://download.csdn.net/detail/qw0907/9783119

          

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章