独自快乐|spring框架的入门学习:AOP和面向切面的事务( 四 )


首先创建一个动态代理类UserServiceProxyFactory
package com.huanfeng.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import com.huanfeng.service.UserService;import com.huanfeng.service.UserServiceImpl;public class UserServiceProxyFactory implements InvocationHandler{ private UserService us; public UserServiceProxyFactory(UserService us){super();this.us=us; } public UserService getUserServiceProxy() {UserService userServiceProxy=(UserService) Proxy.newProxyInstance(UserServiceProxyFactory.class.getClassLoader(),UserServiceImpl.class.getInterfaces(),this);return userServiceProxy; } @Override public Object invoke(Object arg0, Method method, Object[] arg2) throws Throwable {System.out.println("开启事务");Object invoke=method.invoke(us, arg2);System.out.println("关闭事务");return invoke; }}首先这个类有一个动态代理UserService的方法 , 这个getUserServiceProxy方法中使用proxy.newProxyInstance方法 , 这个方法传递三个参数 , 第一个参数是一个类加载器(随便一个都行) , 第二个参数是需要代理类的接口 , 第三个是InvokeHandler接口 , 因为我们的这个代理类实现了InvokeHandler接口 , 所以我们只需要传递参数this就好了 , 然后因为实现了这个接口 , 所以需要重写其invoke方法 , 这个方法的主要参数第二个是增强的方法 , 第三个是方法的参数 , 所以我们可以在invoke方法进行内部调用 , 在调用前后进行方法的增强工作 。
@Test public void fun3() {UserService us=new UserServiceImpl();UserServiceProxyFactory factory=new UserServiceProxyFactory(us);UserService usProxy=factory.getUserServiceProxy();usProxy.add(); }首先我们创建一个Service , 然后创建动态代理类并将这个Service作为参数传递 。 调用getUserServiceProxy方法就可以获取到这个Service的代理类了 , 之后只要调用这个方法 , 其实它都会走代理类的invoke方法 , 所以我们可以在内部对其进行增强了 。
独自快乐|spring框架的入门学习:AOP和面向切面的事务
独自快乐|spring框架的入门学习:AOP和面向切面的事务
独自快乐|spring框架的入门学习:AOP和面向切面的事务spring中aop的使用导报:
独自快乐|spring框架的入门学习:AOP和面向切面的事务导入aop的约束:
独自快乐|spring框架的入门学习:AOP和面向切面的事务
独自快乐|spring框架的入门学习:AOP和面向切面的事务
独自快乐|spring框架的入门学习:AOP和面向切面的事务
独自快乐|spring框架的入门学习:AOP和面向切面的事务


推荐阅读