Spring AOP(1)
1、我理解的Spring AOP
AOP其实就是划分出来了一个切面,然后在这个切面里面进行了一些增强,最后产生一个增加了新功能的代理对象,注意,是代理对象,这是Spring AOP实现的基础。这个对象只不过比原始对象(Bean)多了一些功能而已,比如Bean预处理,Bean后处理,异常处理等。
2、简单的Demo理解Spring AOP
首先定义一个AOP代理工厂AOPProxyFactory,这个工厂产生增强后的代理对象。
public class AOPProxyFactory{ public static Object createProxy(Object target,MethodBeforeAdvice mbAdvice){ return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler(){//拦截器 public Object invoke()(Object proxy,Method m,Object[] args) throws Throwable{ mbAdvice.before(m,args,target);//方法执行前增强 return m.invoke(target,args);//方法调用 } });}MethodBeforeAdvice mbAdvice =new MethodBeforeAdvice(){ public before(Method m,Object[] args,Object target){ do something; }};UserserviceImpl target=new UserserviceImpl();//待增强的原始业务bean,在Spring中并非new出来,而是使用IOC注入Userservice接口中的Userservice us= (Userservice)AOPProxyFactory.create(target,mbAdvice);us.login(username,password);//us即为代理对象,此方法执行时,会首先执行before()
<bean id="loginBeforeAdvisor" value=".*UserService\.login"/> <property name="advice"> <bean name="code"><bean id="userService" ref="targetService"/></bean>