Project X
---------
public class A {}
Public class B{
@Autowire
private A a;
@Autowire
private D d;
}
Project Y
---------
Public class C{
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("spring/application-Context.xml");
B b = context.getBean("b", B.class);
}
}
application-Context.xml
<bean id="a" class="A" />
<bean id="b" class="B" />
问题: 我有如上所述的设置,其中我有Project X的二进制文件,目前我正在使用Project Y.我想创建Class B对象而不在Project Y中创建D.最好的方法是什么?
答案 0 :(得分:1)
您可以在自动装配的注释中使用此字段。
@Autowired(required=false)
private D d;
如果您无权访问项目X,则必须进行某种攻击。
在你的项目中创建标记为服务的类并扩展D类,这样春天就会注入你的类。
@Component
@Primary
public class MockD extends D {
}
在这种情况下@Primary会说要优先考虑,而不是其他实现。所以你的班级将注入B班
答案 1 :(得分:0)
依赖注入绝不是强制性的。程序员是否希望注入豆子。
所以在B的定义中,你可以简单地注入下面给出的bean A:
await myAutoResetEvent.WaitOneAsync(cancellationToken).ConfigureAwait(false);
只有当B类扩展application-Context.xml
<bean id="a" class="A" />
<bean id="b" class="B" >
<property name="a" ref="a" />
</bean>
并覆盖InitializingBean
方法并检查D是否被注入时,那么只有它可能会引起问题,否则你会对上面的注入有好处。无需像这样创建和注入bean D.
答案 2 :(得分:0)
<!--<context:annotation-config/>-->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
<property name="requiredParameterValue" value="false" />
而不是添加annotation-config,必须添加上面一个