Java 基于活动轮廓自动关联具有不同参数的方法
使用Spring Boot,我有一个自动连接的方法,如果活动概要文件是本地的,我想从属性文件传入两个变量,但是如果是dev/prod,我只想传入一个变量(由于环境的自动配置,端点不是必需的) 这不起作用,因为spring不知道自动连线的方法。我已经尝试过添加(required=true/false),无论我如何配置required,它仍然会抛出错误。是否有更好的方法添加可选的基于概要文件的参数值Java 基于活动轮廓自动关联具有不同参数的方法,java,spring,Java,Spring,使用Spring Boot,我有一个自动连接的方法,如果活动概要文件是本地的,我想从属性文件传入两个变量,但是如果是dev/prod,我只想传入一个变量(由于环境的自动配置,端点不是必需的) 这不起作用,因为spring不知道自动连线的方法。我已经尝试过添加(required=true/false),无论我如何配置required,它仍然会抛出错误。是否有更好的方法添加可选的基于概要文件的参数值 /* * * * * * * * * * * * * * * * * application-lo
/* * * * * * * * * * * * * * * * *
application-local.properties
company.group.endpoint=http://localhost:8000/
company.group.version=/v2
* * * * * * * * * * * * * * * * *
application-dev.properties
company.group.version=/v3
* * * * * * * * * * * * * * * * *
*/
// Worker.java
@Component
public class Worker {
private String endpoint;
private String version;
@Autowired
public Worker(@Value("${company.group.version}") String version) {
this.version = version;
// do work
}
@Autowired
public Worker(@Value("${company.group.version}") String version,
@Value("${company.group.endpoint}") String endpoint) {
this.version = version;
this.endpoint = endpoint;
// do work
}
}
仅使用一个构造函数,并将可选参数移动到字段中。按照惯例,您可以区分哪些参数是该组件必须存在的,哪些是可选的,从而使代码更易于测试和维护
@Component
public class Worker {
@Value("${company.group.endpoint:@null}")
private String endpoint;
private String version;
@Autowired
public Worker(@Value("${company.group.version}") String version) {
this.version = version;
// do work
}
}
使用可注入bean重载构造函数不像pojo类那样简单。
实际上,Spring不知道应该调用哪个构造函数 因此,作为替代方案,我们倾向于使用单个自动连接构造函数。
您可以通过指定默认值(如
null
)使其中一个参数成为可选参数:
@Autowired
public Worker(@Value("${company.group.version}") String version,
@Value("${company.group.endpoint:#{null}}") String endpoint) {
this.version = version;
this.endpoint = endpoint;
// do work
}
完美的看起来,在构造函数中指定自动连接值并不意味着该属性必须存在,如果您像您指出的那样将其设置为默认值为null,那么没有声明它的概要文件只是默认值为null并起作用,您只需负责处理当该属性为null时该做什么的逻辑。