我怎样才能让一个已经存在的对象由 spring 管理?我想使用 aspectj
将它连接到 Springs AoP
功能。我知道这是一个挑战,因为 Spring AoP
使用可能与对象一起创建的动态代理。
我为什么需要这个?
我有一个第三方类,它带有一个仅在运行时中已知的构造函数参数,
因此,我似乎无法将它添加到我的 applicationContext
或使用 spring FactoryBean
接口(interface)进行构造。 还有其他办法吗?
我已经尝试过以下方法但没有取得很大成功:
Obj obj = new ThirdPartyObj("runtime constructor arg");
appContext.getAutowireCapableBeanFactory().initializeBean(obj, "Obj");
它可能是 spring 管理的,但我仍然不能用它来触发方面。
[编辑] axtavt 指出问题是我没有使用从 initializeBean(..)
返回的对象。上述两种方法都有效,但前提是:
使用接口(interface)
ObjInterface obj = (ObjInterface) ac.getBean("obj", args);
或者我们将得到:java.lang.ClassCastException: $Proxy28 无法转换为 com.company.Obj
不使用接口(interface)但启用
CGLIB
。这需要一个非私有(private)默认构造函数,否则我们将得到:java.lang.IllegalArgumentException: 父类(super class)没有空构造函数但没有给出参数
最佳答案
为什么不创建一个包装ThirdPartyObj
功能的新类,并使那个 由Spring 管理。然后可以将依赖项注入(inject)其字段和方法参数,并传递给实例化的 ThirdPartyObj
。
关于java - 使对象 Spring 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288640/