Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 如何通过springspel注入bean属性列表?_Java_Spring_Spring El - Fatal编程技术网

Java 如何通过springspel注入bean属性列表?

Java 如何通过springspel注入bean属性列表?,java,spring,spring-el,Java,Spring,Spring El,我有一个用于定义动态端点(名称、主机和端口)的属性文件 因此,我创建了一个名为EndPoint的bean,其中name、host和port作为成员变量 如何使用Spring@Value和SpEL动态注入服务器的主机和端口 端点属性 names=server1,server2,server3 endpoint.server1.host=192.168.1.101 endpoint.server1.port=10101 endpoint.server2.host=192.168.1.102 end

我有一个用于定义动态端点(名称、主机和端口)的属性文件

因此,我创建了一个名为
EndPoint
的bean,其中name、host和port作为成员变量

如何使用Spring
@Value
和SpEL动态注入服务器的主机和端口

端点属性

names=server1,server2,server3

endpoint.server1.host=192.168.1.101
endpoint.server1.port=10101
endpoint.server2.host=192.168.1.102
endpoint.server2.port=10102
endpoint.server3.host=192.168.1.103
endpoint.server3.port=10103
EndPoint.java

public class EndPoint {

    /** name */
    private String name;

    // hardcode server1 here
    // how to inject server's host dynamically by name?
    // @Value("${endpoint.#{this.name}.host}")
    @Value("${endpoint.server1.host}")            
    private String host;

    @Value("${endpoint.server1.port}")
    private int port;

    public EndPoint(String name) {
        this.name = name;
    }
}
@Configuration
@PropertySource( //
    value = { "classpath:conf/endpoint.properties" }, ignoreResourceNotFound = true//
)
public class EndPointBeanConfig {

    @Autowired
    private Environment env;

    @Bean(name = "endPoints")
    public List<EndPoint> endPoints() {
        final List<EndPoint> endPoints = new ArrayList<EndPoint>();
        final String[] names = env.getProperty("names").split(",");
        for (final String name : names) {
            final EndPoint endPoint = endPoint(name);
            endPoints.add(endPoint);
        }
        return endPoints;
    }

    @Bean(name = "endPoint")
    @Scope("prototype")
    public EndPoint endPoint(String name) {
        return new EndPoint(name);
    }
}
EndPointBeanConfig.java

public class EndPoint {

    /** name */
    private String name;

    // hardcode server1 here
    // how to inject server's host dynamically by name?
    // @Value("${endpoint.#{this.name}.host}")
    @Value("${endpoint.server1.host}")            
    private String host;

    @Value("${endpoint.server1.port}")
    private int port;

    public EndPoint(String name) {
        this.name = name;
    }
}
@Configuration
@PropertySource( //
    value = { "classpath:conf/endpoint.properties" }, ignoreResourceNotFound = true//
)
public class EndPointBeanConfig {

    @Autowired
    private Environment env;

    @Bean(name = "endPoints")
    public List<EndPoint> endPoints() {
        final List<EndPoint> endPoints = new ArrayList<EndPoint>();
        final String[] names = env.getProperty("names").split(",");
        for (final String name : names) {
            final EndPoint endPoint = endPoint(name);
            endPoints.add(endPoint);
        }
        return endPoints;
    }

    @Bean(name = "endPoint")
    @Scope("prototype")
    public EndPoint endPoint(String name) {
        return new EndPoint(name);
    }
}
@配置
@PropertySource(//
value={“classpath:conf/endpoint.properties”},ignoreResourceNotFound=true//
)
公共类EndPointBeanConfig{
@自动连线
私人环境署;
@Bean(name=“endPoints”)
公共列表终结点(){
最终列表端点=新的ArrayList();
最后一个字符串[]name=env.getProperty(“名称”).split(“,”);
for(最终字符串名称:名称){
最终端点=端点(名称);
添加(端点);
}
返回端点;
}
@Bean(name=“endPoint”)
@范围(“原型”)
公共端点(字符串名称){
返回新端点(名称);
}
}

我只是给出建议,在您的项目中使用YAML/Properties进行此类实现