如何将弹簧属性注入检票口组件?

时间:2015-12-22 13:54:00

标签: spring properties dependency-injection wicket

我正在寻找将弹簧上下文中定义的属性(由propertiesFactoryBean提供)注入wicket组件的可能性。我知道使用 @SpringBean -Annotation将bean注入组件的方法,但是对于属性有什么相应的方法吗?

我的财产定义方式:

<bean id="myPropertiesFactory" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
        <props>
            <prop key="mySpringProperty">mySpringProperty</prop>
    </property>
</bean>

我尝试过的事情。它通常使用自定义bean的方式:

@Inject
@Value("${mySpringProperty}")

使用propertiesFactory的名称来访问属性值

@Inject
@Value("$myPropertiesFactory.properties.mySpringProperty")

使用注释

@Value("#myPropertiesFactory['mySpringProperty']")

使用 SpringBean

@SpringBean(name="myPropertiesFactory.mySpringProperty")

这些解决方案都不起作用。为了得到 mySpringProperty ,我使用解决方法来创建一个String类型的bean,当我用 SpringBean 注释我的组件的相应成员时,wicket正确地注入了它认为必须有更好的解决方案。

<bean id="mySpringPropertyBean" class="java.lang.String">
    <constructor-arg type="java.lang.String" value="https://foobar.com" />
</bean> 

注释

@SpringBean
private String mySpringPropertyBean;

2 个答案:

答案 0 :(得分:2)

@SpringBean仅支持注入spring bean。我想有人可以实现一个@SpringValue注释来做你想要的,但据我所知,没有人做过。

我通常做的是:

  • 我的wicket应用程序类是一个spring bean。
  • 它具有@Value注释的属性 - 因为对象是一个spring bean,这些是被评估和设置的
  • 我通过调用MyApplication.get()。getXXX()或((MyApplication)getApplication())来访问实际值.getXXX()
  • 如果应用程序增长且属性数量接近限制,我将它们重构为单独的Settings或Config类 - 每个类都是它自己的一个bean,可以从应用程序类访问。

答案 1 :(得分:0)

在您的Wicket类中使用@Value(“ $ {mySpringProperty}”):

@SpringBean
private PropertiesConfiguration propertiesConfiguration;

创建一个新的PropertiesConfiguration类:

@Component
public class PropertiesConfiguration {
    @Value("${mySpringProperty}")
    private String mySpringProperty;

    //getters & setters
} 

在您的检票班使用:

System.out.println("mySpringProperty=" + propertiesConfiguration.getMySpringProperty());