Spring boot 在spring boot中自动连接参数化构造函数

Spring boot 在spring boot中自动连接参数化构造函数,spring-boot,dependency-injection,constructor,parameter-passing,Spring Boot,Dependency Injection,Constructor,Parameter Passing,在参数化构造函数中传递值时,我无法自动连接bean 如何使用SpringBoot调用参数化构造函数 @组件 公共类主类{ 公共任务(){ 另一类obj=新的另一类(1,2); } } //是否使用Autowire替换另一个新类(1,2)? @组成部分 公共类另一类{ 私人整数,年龄; 公共另一类(整数、整数年龄){ 超级(); 这个数字=数字; 这个。年龄=年龄; } } 我想自动连接“AnotherClass”bean。 如何删除新的另一个类(1,2) 如何将@Autowire放置在此处?您

在参数化构造函数中传递值时,我无法自动连接bean

如何使用SpringBoot调用参数化构造函数

@组件
公共类主类{
公共任务(){
另一类obj=新的另一类(1,2);
}
}
//是否使用Autowire替换另一个新类(1,2)?
@组成部分
公共类另一类{
私人整数,年龄;
公共另一类(整数、整数年龄){
超级();
这个数字=数字;
这个。年龄=年龄;
}
}
我想自动连接“AnotherClass”bean。 如何删除
新的另一个类(1,2)

如何将
@Autowire
放置在此处?

您需要在构造函数中指定此bean:

@组件
公共类主类{
私人最后一班,另一班;
//如果只有一个构造函数,则不需要此注释,为清楚起见,请参见图中所示。
@自动连线
主类(另一类另一类){
this.anotherClass=另一个类;
}
公共任务(){
//当您到达这里时,另一个类已经实例化。
}
}

选项1:直接允许使用组件扫描创建另一个类

现在,为了让Spring能够构建另一个类作为bean,您需要以“Spring方式”告诉它从何处获取值:

@组件
公共类另一类{
私人最终整数,年龄;
//如果这是唯一的构造函数,也不需要。
@自动连线
公共另一类(
//@Value是一个spring注释,用于为spring提供此参数所需的值。
@值(“${property.number:0}”)整数,
@值(“${property.age:0}”)int-age){
这个数字=数字;
这个。年龄=年龄;
}
}
这样做的目的是从
application.properties
|
application.yml
中提取两个属性,
property.number
property.age
,以获取这些整数的值

您需要确保这两个类都在组件扫描路径上,否则SpringBoot不会尝试生成这些类的bean


选项2:使用一个配置类来创建另一个类
bean

@配置
公共类MyConfiguration类{
@豆子
公共另一类{
返回新的其他类(1,2)
}
}
在本例中,不会用
@组件
注释另一个类


选项3:使用自定义工厂方法

同样,使用此策略,不要用
@组件
注释另一个类

@配置
公共类MyConfiguration类{
@豆子
公共双功能myPrototypeFactory(){
返回开始,年龄->另一个类(开始,年龄);
}
@豆子
@范围(BeanDefinition.Scope\u原型)
公共另一个类另一个类(整数开始,整数年龄){
如果(开始==null | |年龄==null){
抛出新的IllegalArgumentException(“开始是:+start+”,年龄是:+age+”。两者都不能为空!”;
}
返回另一个新类(开始,年龄);
}
}
用法:

@组件
公共类主类{
私人最终双功能另一类工厂;
//如果只有一个构造函数,则不需要此注释,为清楚起见,请参见图中所示。
@自动连线
主类(双功能另一类工厂){
this.anotherClassFactory=另一个classfactory;
}
公共任务(){
另一类ac=另一类工厂。适用(1,2);
//对你的新同学做点什么
}
}

选项4:使用
ObjectProvider
(从Spring 4.3开始)

同样,使用此策略,不要用
@组件
注释另一个类

@配置
公共类MyConfiguration{
@豆子
@范围(BeanDefinition.Scope\u原型)
public AnotherClass createAnotherClass(整数开始,整数年龄){
返回另一个新类(开始,年龄);
}
}
用法:

@组件
公共类主类{
私有最终对象提供程序另一个类提供程序;
//如果只有一个构造函数,则不需要此注释,为清楚起见,请参见图中所示。
@自动连线
MainClass(对象提供程序和其他类提供程序){
this.anotherClassProvider=另一个classprovider;
}
公共任务(){
//可能需要强制转换“.getObject()”的结果
AnotherClass ac=anotherClassProvider.getObject(/*start*/1,/*age*/2);
//对你的新同学做点什么
}
}

你好,你想做什么?您试图做的事情是否太让人困惑,首先您需要知道
自动布线
定义,以及在这种情况下是否真的需要实现。请阅读一点此文档,感谢@JonathanJohx的回复。您能告诉我如何使用SpringBoot调用参数化构造函数吗?首先,作为
@Component
添加到Spring容器中的类是一个对象,您可以定义其作用域,如果您希望按请求/单例创建一个,但默认情况下其作用域为单例,那么这意味着如果您放置该注释,那么您将只拥有一个对象,然后你真的希望有一个
另一个类作为组件,然后你可以在你的配置类中定义一个
@Bean
,在注释上创建一个方法,并放置
返回新的另一个类(数字、年龄)@JonathanJohx最后一个查询!我将如何在配置类中将动态值传递给number和age?正如我之前提到的,我需要知道您真正想要什么,我们可以通过电子邮件交谈以便我们可以交谈b吗