【问题标题】:How to inject only one property into class如何只将一个属性注入类
【发布时间】:2013-08-11 11:38:02
【问题描述】:

我有课

class A{
     private Foo foo;
     private Bar bar;
     private Baz baz;
}

现在这个类有初始化 foo 和 bar 的构造函数。 Baz 但是有一个 DataSource 字段,我想给它注入弹簧。 A 类构造函数初始化除baz 之外的所有对象。现在A 类用new 初始化。

A a = new A(Foo, Bar)

A 类具有设置器。 豆

<bean id="ABean" class="com.acme.A" >
        <property name="baz">
                    <bean class="com.acme.baz">
                            <property name="dataSource" ref="mysqlDataSource">  </property> 
                    </bean>     
        </property>
    </bean> 

但我不断得到:

nested exception is java.lang.NoSuchMethodException: com.acme.A.<init>()

1.如何在每个 bean 中只注入一个属性,而其余的由构造函数初始化?

2。还有什么办法可以解决这个问题?

【问题讨论】:

标签: java spring property-injection


【解决方案1】:

对于构造函数的参数,使用constructor-arg xml 标签,对于使用setter 设置的参数,使用property xml 标签。

为此,您需要定义setBaz() 方法。

那么你应该使用getBean() 而不是自己构造对象。让 spring 为你构建它。

【讨论】:

  • 我在A 中获得了setBaz()。因为Foo, Bar 是来自使用 Apache Commons 配置填充的属性文件的动态且安静的复杂元数据,所以我必须以编程方式执行它并由常规程序构建。我只想将 Spring 注入用于 Baz 属性。 OT 记住 getBean 每个项目只有一两次是好的。
  • @mCs 如果 Spring 自动为您构建对象不适合您的情况,您为什么不自己设置 baz 属性呢?如果您愿意,您仍然可以从配置文件中读取它。
猜你喜欢
  • 1970-01-01
  • 2019-08-03
  • 2016-10-16
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 2014-11-09
  • 2015-03-29
  • 1970-01-01
相关资源
最近更新 更多