关于Spring的AOP容器的简单理解

AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。比如说日志、安全、缓存等那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码


AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”


代理的两种方式:
1、静态代理

 针对一个接口编写一个代理类

/** 
 * 代理类和目标做的事情是一样的,所以实现相同的接口. 
 * @author Summer 
 * 
 */  
public class UserManagerImplProxy implements UserManager {  
  
    //目标引用.  
    private UserManager userManager;  
      
    //通过构造方法传递过来.  
    public UserManagerImplProxy(UserManager userManager)  
    {  
        this.userManager = userManager;  
    }  
    @Override  
    public void addUser(String username, String password) {  
  
        checkSecurity();  
        userManager.addUser(username, password);  
    }  
  
    @Override  
    public void delUser(int userId) {  
        // TODO Auto-generated method stub  
  
        checkSecurity();  
        userManager.delUser(userId);  
    }  
  
    @Override  
    public String findUserById(int userId) {  
  
        checkSecurity();  
        return userManager.findUserById(userId);  
    }  
  
    @Override  
    public void modifyUser(int userId, String username, String password) {  
  
        checkSecurity();  
        userManager.modifyUser(userId, username, password);  
          
    }  
      
    private void checkSecurity()  
    {  
        System.out.println("------------UserManagerImpl.checkSecurity()----");  
    }  
  
} 





2、动态代理
1)实现InvocationHandler接口
2)通过反射和产生动态代理的类 java.lang.refect.Proxy为各种接口动态生成相应的代理类
3)重写invoke方法

import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
import java.lang.reflect.Proxy;  
  
public class SecurityHandler implements InvocationHandler {  
  
    private Object targetObject;  
      
    public Object createProxyInstance(Object targetobject)  
    {  
        this.targetObject = targetobject;  
        //根据目标生成代理.  
        //代理是对接口来说的,是拿到目标的接口.拿到这个接口,实现这个接口.  
        //targetobject这个目标类实现了哪个接口.  
        //返回代理.  
         return Proxy.newProxyInstance(targetobject.getClass().getClassLoader(),  
                targetobject.getClass().getInterfaces(), this);  
    }  
      
      
    @Override  
    public Object invoke(Object proxy, Method method, Object[] args)  
            throws Throwable {  
          
        //检查安全性.  
        checkSecurity();  
          
        //当前方法,调用目标对象的方法.  
        //调用目标方法.  
        Object ret =  method.invoke(targetObject, args);  
          
        return ret;  
    }  
  
  
    //检查安全性.  
    private void checkSecurity()  
    {  
        System.out.println("------------UserManagerImpl.checkSecurity()----");  
    }  
  
}  
参考文章一

参考文章二

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值