Java 这样实现spring初始化Bean是正确的方法吗?
我想为IdGenerator类中的主机和端口字段赋值,实现这一点的最佳方法是什么 注意:IdGenerator最好不由spring管理, 客户端类可以作为静态方法调用genId()Java 这样实现spring初始化Bean是正确的方法吗?,java,spring,Java,Spring,我想为IdGenerator类中的主机和端口字段赋值,实现这一点的最佳方法是什么 注意:IdGenerator最好不由spring管理, 客户端类可以作为静态方法调用genId() @组件 公共类IdGenerator实现初始化bean{ 私有静态最终记录器Logger=LoggerFactory.getLogger(IdGenerator.class); @值(${vesta.host}”) 私有字符串主机; @值(${vesta.port}”) 专用整数端口; 静态VestaHttpCli
@组件
公共类IdGenerator实现初始化bean{
私有静态最终记录器Logger=LoggerFactory.getLogger(IdGenerator.class);
@值(${vesta.host}”)
私有字符串主机;
@值(${vesta.port}”)
专用整数端口;
静态VestaHttpClient客户端;
@凌驾
公共无效afterPropertiesSet(){
Assert.hasText(主机);
Assert.notNull(端口);
LOGGER.info(“即将初始化IdGenerator”);
试一试{
客户端=新的VestaHttpClient(主机、端口);
}捕获(例外e){
LOGGER.info(“IdGenerator初始化失败”);
抛出新的RuntimeException(“------------VestaHttpClient初始化失败----------------”);
}
info(“IdGenerator已成功初始化”);
}
公共静态字符串genId(){
返回client.genId()+“”;
}
}
您只需在@Configuration
类中将VestaHttpClient
构建为一个bean,使用propertyplaceholderconfigure
获取属性值,并将它们注入到带有@Value
注释的字段中。下面是我模仿的一些代码来描述我的建议(可能需要一些调整):
如果您想使用字段注入注入属性值,即所谓的“干净”配置bean,那么
初始化bean
是验证属性的正确方法
然而,另一种方法是使用构造函数注入,去掉初始化bean
@Component
public class IdGenerator {
private static final Logger LOGGER = LoggerFactory.getLogger(IdGenerator.class);
private String host;
private Integer port;
static VestaHttpClient client;
@Autowired
public WebProperties(@Value("${vesta.host}") String protocol,
@Value("${vesta.port}") Integer port) {
// Validate properties and initialize VestaHttpClient
}
}
有什么问题吗?您正在注入2个字段和…?什么是“IdGenerator最好不由spring管理”。。。那你需要初始化Bean做什么?
@Component
public class IdGenerator {
private static final Logger LOGGER = LoggerFactory.getLogger(IdGenerator.class);
private String host;
private Integer port;
static VestaHttpClient client;
@Autowired
public WebProperties(@Value("${vesta.host}") String protocol,
@Value("${vesta.port}") Integer port) {
// Validate properties and initialize VestaHttpClient
}
}