Java类xml vs java bean自动装配

时间:2015-11-11 17:32:53

标签: spring javabeans autowired spring-java-config

在xml定义的bean中,您可以定义两个类,如

<bean id="classA" class="ex.ClassA"/>

<bean id="classB" class="ex.classB"/>

然后在您的java实现中,您可以自动装配示例

中某个类的构造函数
public class ClassA {
@autowired
public(ClassB classB){
this.classB = classB;
}

现在如何使用java配置bean来实现这一点,因为在示例中

@Bean
public ClassA classA(){
return new ClassB();
}

@Bean
public ClassB classB(){
return new ClassB()
}

编译器会警告Class a没有任何这样的构造函数,如何用java进行自动装配?

全部谢谢

2 个答案:

答案 0 :(得分:1)

请参阅http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-java-injecting-dependencies

请注意,ClassB bean隐式是单例。在@Configuration类上使用注释Config可确保Spring在ClassB调用中返回classB() bean的单例实例。

@Configuration
public class Config {
    @Bean
    public ClassA classA(){
        return new ClassA( classB() );
    }

    @Bean
    public ClassB classB(){
        return new ClassB();
    }
}

或者您可能更喜欢这种方法(需要Spring 4.2.1+)

@Configuration
@Import(ClassA.class)
public class Config {
    @Bean
    public ClassB classB(){
        return new ClassB();
    }
}

@Component
public class ClassA {
    @Autowired
    public ClassA(ClassB classB) {
      ...
    }
}

答案 1 :(得分:0)

将您想要的bean作为参数传递给@Bean方法,或者使用组件扫描隐式创建依赖bean。