首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从IndexedArgumentsValue中获取BeanDefinition

如何从IndexedArgumentsValue中获取BeanDefinition
EN

Stack Overflow用户
提问于 2014-12-11 11:36:13
回答 1查看 118关注 0票数 2

请考虑以下示例:

配置类

@配置公共类MyTestConfig {

代码语言:javascript
运行
复制
@Value("${const.arg.a}") String constArgA;
@Value("${const.arg.b}") String constArgB;

@Bean
public static PropertyPlaceholderConfigurer properties(){
    SystemPropertyPlaceholderConfigurer propertyConfigurer = new SystemPropertyPlaceholderConfigurer();
    propertyConfigurer.setLocation( "test.properties" );
    propertyConfigurer.setPropertyPrefixValue("TEST");
    propertyConfigurer.setIgnoreUnresolvablePlaceholders( true );
    return propertyConfigurer;
}

@Bean
public SpringTest springTest(){
    return new SpringTest(constArgA, constArgB);

}

}

豆子

公共类SpringTest {

代码语言:javascript
运行
复制
private String constArgA;
private String constArgB;

public SpringTest(String constArgA, String constArgB){
    this.constArgA = constArgA;
    this.constArgB = constArgB;

    System.out.println("constArgA " + constArgA);
    System.out.println("constArgB " + constArgB);
}

public void sayHello(){
    System.out.println("Hello, I hope this works");
    System.out.println("constArgA " + constArgA);
    System.out.println("constArgB " +  constArgB);
}

}

SystemPropertyPlaceholderConfigurer是PropertyPlaceholderConfigurer的一个扩展,在该扩展中,我们尝试操作Bean构造器参数。

对于我的用例,我需要访问构造函数参数,但是如果我从BeanDefinition获得ConfigurableListableBeanFactory,我会看到一个空列表。

准确地说,Bean 'SpringTest‘的以下所有内容都是空的:

代码语言:javascript
运行
复制
beanDefinition.getPropertyValues();
beanDefinition.getConstructorArgumentValues().getIndexedArgumentValues();
beanDefinition.getConstructorArgumentValues().getGenericArgumentValues();

我希望在constArgA中接收到constArgB和ConstructorArgumentValues。

现在,如果我将基于Java的Config替换为基于Xml的Config,如下所示:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean
    class="com.abc.SystemPropertyPlaceholderConfigurer">
    <property name="location">
        <value>test.properties</value>
    </property>
    <property name="propertyPrefixValue">
        <value>TEST</value>
    </property>
</bean>


<bean id="springTest" class="com.abc.SpringTest" >
    <constructor-arg index="0" type="java.lang.String" value="${const.arg.a}" />
    <constructor-arg index="1" type="java.lang.String" value="${const.arg.b}" />        
</bean>
</beans>

现在,如果我试图访问我的BeanDefinition,我会在以下两个构造函数参数中获得:

beanDefinition.getConstructorArgumentValues().getIndexedArgumentValues()

请您帮助我理解这两种配置方式的区别,如果我想使用基于Java的Config,如何访问bean上的构造函数参数?基本上,我需要将属性文件中的属性作为构造函数参数注入,并需要通过PropertyPlaceholderConfigurer的实现对其执行一些处理。

EN

回答 1

Stack Overflow用户

发布于 2014-12-11 13:54:44

在@configuration类中,我通常这样做

代码语言:javascript
运行
复制
@Configuration
@PropertySource("classpath:/test.properties")
public class MyTestConfig {

    @Resource
    private Environment env;

    @Bean
    public SpringTest springTest(){
        return new SpringTest(env.getRequiredProperty("const.arg.a"), env.getRequiredProperty("const.arg.b"));

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27421942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档