阿狸先森|为何设置@Scope("prototype")无效?( 二 )

ScopedProxyMode.TARGET_CLASS , 创建基于类的代理(使用CGLIB)
理解:除了接口以外 , Spring还可以使用CGLIB创建一个代理 , 该代理类是目标类的子类 , CGLib底层采用ASM字节码生成框架 , 使用字节码技术生成代理类 。 本质上 , 它执行以下操作
Foo target = new Foo();net.sf.cglib.proxy.Enhancer enhancer = new net.sf.cglib.proxy.Enhancer();enhancer.setInterfaces(target.getClass().getInterfaces());//该代理类是目标类的子类enhancer.setSuperclass(target.getClass());net.sf.cglib.proxy.MethodInterceptor interceptor = ... // some proxy specific logic, likely referencing the `target`enhancer.setCallback(interceptor);Foo proxy = (Foo) enhancer.create();结论:如果正在对interfaces进行编程(目标对象实现了接口) , 那么设置proxyMode=ScopedProxyMode.INTERFACES 即可 。 如果不是 , 则需设置proxyMode =ScopedProxyMode.TARGET_CLASS 。
最后感谢您的阅读 , 如果喜欢本文欢迎关注和转发 , 本头条号将坚持持续分享IT技术知识 。 对于文章内容有其他想法或意见建议等 , 欢迎提出共同讨论共同进步 。
参考文章
@Scope(prototype)%E7%9A%84%E6%AD%A3%E7%A1%AE%E7%94%A8%E6%B3%95/


推荐阅读