将bean注入默认构造函数

时间:2013-07-03 05:46:38

标签: java spring

假设我有一个这样的课程:

public class A {

 private B b;

 public A() {

 }

 // Some code calling methods in b.
}

如何在不通过Spring添加参数化构造函数的情况下,通过XML配置将B实例注入A?

我可以同时使用参数化构造函数和setter吗?

 public class A {

     private B b;

     public A(B b) {
        this.b = b;
     }

     public void setB(B b) {
         this.b = b;
     }
     // Some code calling methods in b.
    }

编辑:感谢您的所有答案。我的实际问题是我有这样一个类:

公共类A {

 private B b;

 public A(B b) {
    this.b = b;
 }
 // Some code calling methods in b.
}

我希望有一个上述类的默认构造函数,而不会为了向后兼容性而删除参数化构造函数。

所以,

  1. 当我添加bean时,bean会自动注入默认构造函数吗?或者我应该在XML文件中有其他配置将其注入其中吗?
  2. 如果我添加一个setter,我应该在XML中进行哪些其他配置更改以及如何进行?
  3. 考虑我有一个xml文件,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="name"
              class="A">
            <constructor-arg ref="B" />
        </bean>
    
    </beans>
    

4 个答案:

答案 0 :(得分:1)

您可以通过Setter Injection完成此操作。为此,您需要为成员字段b

添加setter方法
  

我可以同时使用参数化构造函数和setter吗?

是的,你可以拥有。

如果参数化构造函数是bean中的唯一构造函数,那么你应该使用 构造函数注入。

为您的类创建非参数默认构造函数(以及参数化构造函数),并使用setter OR构造函数注入。

答案 1 :(得分:0)

如果我们不允许更改此类,则无法使用,否则我们可以使用Spring的Autowired注释

public class A {
   @Autowired
   private B b
   ...

答案 2 :(得分:0)

B对象在构造函数中不可用。最好的选择是注入它并使用@PostConstruct方法初始化bean。要注入bean b,请使用sanbhat提到的setter注入。或者,您也可以使用annotation-based configuration,只需在B字段中添加@Inject@Autowired注释,并在XML配置中定义bean B.

public class A {

 @Inject
 private B b;

 @PostConstruct
 public init() {
    // inititalization code...
 }

 // Some code calling methods in b.
}

答案 3 :(得分:0)

您可以通过<constructor-arg>标记将bean类B ID传递给A类(例如beans.xml)

<bean id="a" class="ClassA">
    <constructor-arg ref="beanB"/>
</bean>
<bean id="beanB" class="com.tutorialspoint.SpellChecker">
   </bean>

以下网址可能会帮助您解决这方面的问题

http://www.tutorialspoint.com/spring/constructor_based_dependency_injection.htm [编辑]