0

可以说我有这样的课程:

public class A {

 private B b;

 public A() {

 }

 // Some code calling methods in b.
}

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

我可以同时拥有参数化构造函数和设置器吗?

 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. 如果我添加一个设置器,我应该在 XML 中进行哪些额外的配置更改以及如何进行?

考虑到我有一个如下的 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

4 回答 4

1

您可以通过Setter Injection来实现。为此,您需要为您的成员字段添加一个 setter 方法b

我可以同时拥有参数化构造函数和设置器吗?

是的,你可以拥有。

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

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

于 2013-07-03T05:48:11.013 回答
0

如果不允许我们改变这个类就没有办法了,否则我们可以使用 Spring 的 Autowired 注解

public class A {
   @Autowired
   private B b
   ...
于 2013-07-03T05:56:26.120 回答
0

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

public class A {

 @Inject
 private B b;

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

 // Some code calling methods in b.
}
于 2013-07-03T05:56:39.130 回答
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 [编辑]

于 2013-07-03T05:58:14.670 回答