让对象由 spring 管理

2024-03-17

我怎样才能管理一个已经存在的对象?我想把它连接到Springs AoP能力使用aspectj。我知道这是一个挑战,因为Spring AoP使用可能与对象一起创建的动态代理。

为什么我需要这个?

我有一个第三者类采用构造函数参数,该参数仅在runtime, 因此看来我无法将其添加到我的applicationContext或使用弹簧FactoryBean构建接口。还有其他办法吗?

我已经尝试过以下方法但没有取得很大成功:

Obj obj = new ThirdPartyObj("runtime constructor arg");
appContext.getAutowireCapableBeanFactory().initializeBean(obj, "Obj");

It might由弹簧管理,但我仍然无法使用它来触发方面。


[EDIT] 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


为什么不创建一个新的类来包装其功能ThirdPartyObj, 和做that弹簧管理。然后可以将依赖项注入到其字段和方法参数中,并传递给实例化的对象ThirdPartyObj.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让对象由 spring 管理 的相关文章

随机推荐