欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

AOP 学习, ProxyFactory 学习三

程序员文章站 2022-04-25 20:08:45
...
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会采用基于类的代理。
相关标签: AOP