AOP 学习, ProxyFactory 学习三

ProxyFactory: 拦截没有接口的类


public class TaskImpl {

public void execute() {

System.out.println("run code to here");

}

}


//如果没有接口, 只能用CGLIB, 无论是否声明
pf.setProxyTargetClass(true);


import org.springframework.aop.framework.ProxyFactory;
import org.springframework.aop.support.NameMatchMethodPointcutAdvisor;
public class test2 {

public static void main(String[] args) {

TaskImpl target =new TaskImpl();

ProxyFactory pf=new ProxyFactory(target);

//pf.setProxyTargetClass(true);

NameMatchMethodPointcutAdvisor advisor = new NameMatchMethodPointcutAdvisor();

advisor.setMappedName("execute");

advisor.setAdvice(new MessageDecorator());

pf.addAdvisor(advisor);

TaskImpl task=(TaskImpl)pf.getProxy();

System.out.println(task.getClass());

task.execute();

}

}


结果


class TaskImpl$$EnhancerByCGLIB$$26cc62
hello
run code to here
end


总结
如果满足以下列出的三种情况中的任何一种,ProxyFactory将对目标类进行基于类的代理。

如果目标类没有实现任何接口,不管proxyTargetClass的值是什么,ProxyFactory会采用基于类的代理。

如果有接口并且ProxyFactory的proxyTargetClass属性值被设置为true,ProxyFactory会采用基于类的代理。

如果有接口并且ProxyFactory的optimize属性值被设置为true,ProxyFactory会采用基于类的代理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值