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

[b]一、用代理模式可以实现aop[/b]
1、目标对象和代理对象共同实现同一个接口,当用户调用接口时,返回代理类,代理类里先进行交叉业务逻辑,再进行目标对象的业务逻辑。
[img]/upload/attachment/86423/5f8e4a75-5de6-3570-8702-c516c8e37911.gif[/img]

2、使用JDK中的Proxy类,我们可以只需什么一个切面类,一个目标类,和一个接口,就可以动态得到一个代理类。
public class CustomerServiceImpl implements ICustomerServiceProxy {

public void register() {
System.out.println("注册!");
}
}

[align=center][i]目标对象,继承了接口ICustomerServiceProxy[/i][/align]


/**
* 切面
*
* @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;
}
}

[align=center][i]切面[/i][/align]
	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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值