我怎样才能得到一个已经存在的对象弹簧管理?我想将它连接到Springs AoP
使用aspectj
. 我知道这是一个挑战,因为Spring AoP
使用可能与对象一起创建的动态代理。
为什么我需要这个?
我有一个第三方类,它接受一个仅在运行时知道的构造函数参数,因此我似乎无法将它添加到我的applicationContext
或使用 springsFactoryBean
接口进行构造。还有其他方法吗?
我已经尝试过以下方法但没有取得很大成功:
Obj obj = new ThirdPartyObj("runtime constructor arg");
appContext.getAutowireCapableBeanFactory().initializeBean(obj, "Obj");
它可能是弹簧管理的,但我仍然不能用它来触发方面。
[编辑] axtavt指出问题是我不使用从initializeBean(..)
. 两种提到的方法都有效,但前提是:
使用接口
ObjInterface obj = (ObjInterface) ac.getBean("obj", args);
或者我们会得到一个:java.lang.ClassCastException: $Proxy28 cannot be cast to com.company.Obj
不使用界面但启用
CGLIB
。这需要一个非私有的默认构造函数,否则我们会得到:java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given