之前没系统的学习spring,看书也是看得一知半解,最近稍微系统的学习了一下。尤其是aop,下面就写写我学习的感受,以加深我学习的印象。
在检察院二期的时候我试着去采用spring的声明式事务来代替编程式事务,spring的声明式事务其实其实质就是spring的aop,而spring aop的实质又是jdk的动态代理或CGLIB.
java的代理包括动态代理和静态代理,比如我要在picLogic的每个方法的每个方法加上权限检查checkSecurity,以前采用的办法是在picLogic的每个method开始的时候加入checkSecurity(),但是明白了jdk的proxy之后,可以这么做。1、采用静态代理,生成一个一个类实现同一个interface,其构造函数的参数为此接口
public class StaticProxy implements UserManager{
private UserManager userManager;
public StaticProxy(UserManager userManager){
this.userManager=userManager;
}
.....................
}
实现interface的所有方法,并在每个方法start的时候加入checkSecurity()
2、动态代理:implements InvocationHandler,newProxy的参数为Object,并返回一个动态代理,用Proxy.newProxyInstance(a,b,c),其中的参数详见api,在invoke方法中根据自己的需要在method之前、之后、exception等中加入相应的代码,方法的执行调用method.invoke(),采用的是java的反射机制。
其实spring的aop就是采用的动态代理,还有cglib代理,然后在spring的aop就是配置和少量代码,尤其是声明式事务,其中声明式事务包括pointcut等等,详见spring的api。
在检察院二期的时候我试着去采用spring的声明式事务来代替编程式事务,spring的声明式事务其实其实质就是spring的aop,而spring aop的实质又是jdk的动态代理或CGLIB.
java的代理包括动态代理和静态代理,比如我要在picLogic的每个方法的每个方法加上权限检查checkSecurity,以前采用的办法是在picLogic的每个method开始的时候加入checkSecurity(),但是明白了jdk的proxy之后,可以这么做。1、采用静态代理,生成一个一个类实现同一个interface,其构造函数的参数为此接口
public class StaticProxy implements UserManager{
private UserManager userManager;
public StaticProxy(UserManager userManager){
this.userManager=userManager;
}
.....................
}
实现interface的所有方法,并在每个方法start的时候加入checkSecurity()
2、动态代理:implements InvocationHandler,newProxy的参数为Object,并返回一个动态代理,用Proxy.newProxyInstance(a,b,c),其中的参数详见api,在invoke方法中根据自己的需要在method之前、之后、exception等中加入相应的代码,方法的执行调用method.invoke(),采用的是java的反射机制。
其实spring的aop就是采用的动态代理,还有cglib代理,然后在spring的aop就是配置和少量代码,尤其是声明式事务,其中声明式事务包括pointcut等等,详见spring的api。