忽略spring依赖注入:XML

时间:2015-12-31 13:26:11

标签: java xml spring

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.最好的方法是什么?

3 个答案:

答案 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,必须添加上面一个