`
8821249
  • 浏览: 67473 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring笔记(七)代理模式与aop

阅读更多
一、用代理模式可以实现aop
  1、目标对象和代理对象共同实现同一个接口,当用户调用接口时,返回代理类,代理类里先进行交叉业务逻辑,再进行目标对象的业务逻辑。


  2、使用JDK中的Proxy类,我们可以只需什么一个切面类,一个目标类,和一个接口,就可以动态得到一个代理类。
public class CustomerServiceImpl implements ICustomerServiceProxy {
	
	public void register() {
		System.out.println("注册!");
	}
}

目标对象,继承了接口ICustomerServiceProxy



/**
 * 切面
 * 
 * @author dsm
 *
 */
public class LogInvocationHandler implements InvocationHandler {
	
	private Object target;
	
	public LogInvocationHandler(Object target) {
		this.target = target;
	}

	/**
	 * Proxy通过该方法,将交叉业务逻辑代码插入到目标对象的对应方法上<br>
	 * 织入
	 * 
	 * @param obj 目标对象
	 * @param method 目标对象的方法
	 * @param args 方法的参数
	 */
	public Object invoke(Object obj, Method method, Object[] args)
			throws Throwable {
		
		//交叉业务逻辑
		System.out.println("execute time " + new Date());
		//调用目标对象的方法
		Object rstObj = method.invoke(target, args);
		
		return rstObj;
	}
}

切面

	public static void main(String[] args) {
		ICustomerServiceProxy target = new CustomerServiceImpl();
		target.register();
		
		ICustomerServiceProxy proxy = (ICustomerServiceProxy) Proxy.newProxyInstance(
				target.getClass().getClassLoader(), 
				target.getClass().getInterfaces(), 
				new LogInvocationHandler(target));
		System.out.println(proxy.getClass().getName());
		proxy.register();
	}



  • 大小: 4.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics