`

Spring AOP原理解析

    博客分类:
  • Java
阅读更多

AOP概念:

实现AOP有两种方式:

1、采用Annoation注解的方法.

1、接口的设计

package com.hejunfeng.spring;

public interface UserManager
{
    public void modifyUser(String id,String username,String password) ;
    public void deleteUser(String id) ;
    public void addUser(String username,String password) ;
}

2、接口的实现
package com.hejunfeng.spring.impl;
import com.hejunfeng.spring.UserManager;
public class UserManagerImpl implements UserManager
{
    public void addUser(String username, String password)
    {
        System.out.println("----------UserManagerImpl.addUser()----------------");
    }
    public void deleteUser(String id)
    {
        System.out.println("----------UserManagerImpl.deleteUser()----------------");

    }
    public void modifyUser(String id, String username, String password)
    {
        System.out.println("----------UserManagerImpl.modifyUser()----------------");
    }

}

3、定义一个切点

package com.hejunfeng.spring;

public interface MySecurityManager
{

//抽出的一个切点
public void security();
}


4、实现此切点并进行相应的一些操作(annoation注解)

package com.hejunfeng.spring.impl;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import com.hejunfeng.spring.MySecurityManager;
//这里采用注解方式
@Aspect public class MySecurityManagerImpl implements MySecurityManager
{
    //定义切入点addMethod(),只负责用来描述切入那些方法.这里是add方法.其它的可能很多
    //接收所有的ADD方法是否有返回值是否有*无参数都接收
    @Pointcut("execution(* add*(..))")
    private void allAddMethod(){ }
    //定义Advice方法用来标识在切入点的何处进行织入
    //抽出一个切面就是安全性检查security()
    @Before("allAddMethod()")
    public void security()
    {
        System.out.println("---------作用就是进行安全性检查---------");
    }
}


5、applicationContext.xml文件的配置信息:
<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" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<aspectj-autoproxy></aspectj-autoproxy>
<bean id="mySecurityManagerImpl" class="com.hejunfeng.spring.impl.MySecurityManagerImpl"></bean>
<bean id="userManager" class="com.hejunfeng.spring.impl.UserManagerImpl"></bean>
< /beans>


6、测试,和其它方法效果一致
package com.hejunfeng.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hejunfeng.spring.UserManager;
public class TestStatic {
    public static void main(String[] args)
    {
        BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserManager userManager = (UserManager)factory.getBean("userManager"); userManager.addUser("何俊峰", "110") ;
    }

}

分享到:
评论
2 楼 shenjichao2009 2013-12-05  
1 楼 momoko8443 2009-05-27  
以后转帖的时候稍微排下版

相关推荐

Global site tag (gtag.js) - Google Analytics