我有一个组件如下:
@Component
class A(){
private s;
public A(){}
public A(String s){this.s=s;}
}
这是另一个类我在哪里自动连接上述类:
@Component
class B(){
@Autowire
private A a;
}
在上面的自动装配中,我需要使用参数化构造函数。我怎样才能传递构造函数args?
答案 0 :(得分:0)
我认为你需要一个原型bean的概念。 @Component将创建一个单独的bean,并且在一个地方更改它将在注入它的所有父类中发生变化。
您需要了解如何在singleton bean中注入原型bean。 按照这个例子 https://stackoverflow.com/a/25165971/949912
答案 1 :(得分:0)
你不能,至少不能通过@Autowired
中的B
,但还有其他方法可以做到:
A
的构造函数:一个构造函数使用@Autowired
because注释:
从Spring Framework 4.3开始,@ Autowired构造函数不再存在 如果目标bean只定义了一个构造函数,则必需。如果好几个 建造者是可用的,至少有一个必须注释教 它必须使用的容器。
@Component
class A(){
private s;
public A(){}
@Autowired
public A(@Value("${myval}") String s){this.s=s;}
}
A
公开为@Bean
直接来自the docs:
@Configuration
public class AppConfig {
@Bean
public A a(@Value("${myval}") String s) {
return new A(s);
}
}
A
中构造B
@Component
class B(){
private A a;
@Value("${myval}")
private String myval;
@PostConstruct
private void init()
{
a = new A(myval);
}
}
答案 2 :(得分:-1)
只使用setter而不是构造函数。 如果您想使用 new 关键字自行创建对象,则此对象将不会由容器管理。