目前,我Autowiring
myService
进入我应用中的各种对象,效果很好。
@Autowired
private MyService myService;
使用此配置:
<context:component-scan base-package="com.myapp.mypackage" />
但是,我添加了第三方库,并希望Autowire
myService
加入该软件包中的某些对象,但它无效。
我对组件扫描进行了此更改,但当我尝试在第三方软件包中访问它时,我NullPointerException
获得了myService
:
<context:component-scan
base-package="com.myapp.mypackage, com.thirdparty.thirdpartypackage" />
我认为这会有效吗?
答案 0 :(得分:4)
对于第三方库,通常的方法是使用xml:
<bean class="com.thirdparty.Foo">
<property name="somePropertyWithASetter" ref="myService" />
</bean>
您不能依赖注释,因为第三方库很可能不会使用@Autowired
。
答案 1 :(得分:0)
如果第三方套餐是春季管理的,请忽略其余的答案
我认为在进行依赖注入之前你应该问自己的问题是,对象弹簧是否被管理,要么这样做你要么在spring上下文xml中定义它们,要么用(@component,@ service spring stereo type)注释对象< / p>
让我们看一下手头的案例
让我们看一下(MyService)的示例,如果此服务对象具有状态(因为spring对象是单例),如果此服务具有未注入的协作对象
公共类MyService {
//depending on how MyServiceOne is managed makes it hard to retrofit
//MyService as a spring bean
private MyServiceOne serviceone;
//this also would have an adverse affect if you try use this as a spring managed
//since all spring beans are singleton
private String someState;
}
答案 2 :(得分:0)
您是否尝试过使用适配器模式?我相信您可以在适配器上使用@Autowired
。