Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这样实现spring初始化Bean是正确的方法吗?_Java_Spring - Fatal编程技术网

Java 这样实现spring初始化Bean是正确的方法吗?

Java 这样实现spring初始化Bean是正确的方法吗?,java,spring,Java,Spring,我想为IdGenerator类中的主机和端口字段赋值,实现这一点的最佳方法是什么 注意:IdGenerator最好不由spring管理, 客户端类可以作为静态方法调用genId() @组件 公共类IdGenerator实现初始化bean{ 私有静态最终记录器Logger=LoggerFactory.getLogger(IdGenerator.class); @值(${vesta.host}”) 私有字符串主机; @值(${vesta.port}”) 专用整数端口; 静态VestaHttpCli

我想为IdGenerator类中的主机和端口字段赋值,实现这一点的最佳方法是什么

注意:IdGenerator最好不由spring管理, 客户端类可以作为静态方法调用genId()

@组件
公共类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
    }
}