Java 如何只向类中注入一个属性

Java 如何只向类中注入一个属性,java,spring,property-injection,Java,Spring,Property Injection,我有一节课 class A{ private Foo foo; private Bar bar; private Baz baz; } 现在这个类有了初始化foo和bar的构造函数Baz但是有一个DataSource字段,我想用spring注入该字段。 A类构造函数初始化所有,但不初始化baz。现在,中的A类初始化为new A a = new A(Foo, Bar) A类具有setter。 豆子 但我一直得到: nested exception is jav

我有一节课

class A{
     private Foo foo;
     private Bar bar;
     private Baz baz;
}
现在这个类有了初始化foo和bar的构造函数
Baz
但是有一个
DataSource
字段,我想用spring注入该字段。
A
类构造函数初始化所有,但不初始化
baz
。现在,中的
A
类初始化为
new

A a = new A(Foo, Bar)
A
类具有setter。 豆子


但我一直得到:

nested exception is java.lang.NoSuchMethodException: com.acme.A.<init>()
嵌套异常是java.lang.NoSuchMethodException:com.acme.A.()
1。如何在每个bean中只注入一个属性,而其余属性则由构造函数初始化?


2。还有什么其他方法可以解决这个问题呢?

对于构造函数的参数,使用
构造函数arg
xml标记;对于使用setter设置的参数,使用
属性
xml标记

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


然后应该使用
getBean()
,而不是自己构造对象。让spring为您构建它。

对于构造函数的参数,使用
constructor arg
xml标记;对于使用setter设置的参数,使用
property
xml标记

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


然后应该使用
getBean()
,而不是自己构造对象。让spring为您构建它。

这里有一个类似的问题,您可能想看看;[[1]:Spring容器不管理手动创建(使用“new”运算符)的bean。如果要将属性注入到,必须将其声明为bean并从Spring上下文中获取。可能尝试使用“post构造”方法初始化Foo和Bar这不是一个优雅的解决方案,但似乎不可能将非SpringBean作为参数传递。这里有一个类似的问题,您可能想看看;[[1]:SpringContainer不管理手动创建的(使用“new”操作符)如果你想将属性注入到一个函数中,你必须将它声明为bean并从spring上下文中获取。也许可以尝试使用“post-construct”方法初始化Foo和Bar,这不是一个优雅的解决方案,但似乎不可能将非spring bean作为参数传递。我得到了
setBaz()
A
中。由于
Foo、Bar
是由Apache Commons配置填充的属性文件中动态而安静的复杂元数据,我必须以编程方式并由常规程序构造。我只想对
Baz
属性使用Spring injection。别忘了getBean只能使用一两次ce per project.@mCs如果Spring自动为您构建对象不适合您的情况,为什么您不自己设置baz属性?如果您愿意,您仍然可以从配置文件中读取它。我得到了
setBaz()
A
中。由于
Foo、Bar
是由Apache Commons配置填充的属性文件中动态而安静的复杂元数据,我必须以编程方式并由常规程序构造。我只想对
Baz
属性使用Spring injection。别忘了getBean只能使用一两次ce per project.@mCs如果Spring自动为您构建对象不适合您的情况,您为什么不自己设置baz属性?如果愿意,您仍然可以从配置文件中读取它。
nested exception is java.lang.NoSuchMethodException: com.acme.A.<init>()