Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

spring: set property of one bean by reading the property of another bean?

Is it possible to set the property of one bean by reading the property of another bean? For instance, suppose I had:

class A {    void setList(List list); }  class B {    List getList(); } 

I would like Spring to instantiate both classes, and call A's setList method, passing in the result of calling B's getList method. The Spring configuration might look something like:

<bean id="b" class="B"/> <bean id"a" class="A">     <property name="list" ref="b" ref-property="list"/> </bean> 

Alas, this made-up XML does not work.

Why not just inject B into A? Because I do not want to introduce the extra dependency. A is only dependent List, not on B.

like image 474
Landon Kuhn Avatar asked Oct 21 '09 18:10

Landon Kuhn


People also ask

What is @configuration and @bean in Spring?

Annotating a class with the @Configuration indicates that the class can be used by the Spring IoC container as a source of bean definitions. The @Bean annotation tells Spring that a method annotated with @Bean will return an object that should be registered as a bean in the Spring application context.

How do you inject configuration values from the properties file into beans?

Property values can be injected directly into your beans by using the @Value annotation, accessed through Spring's Environment abstraction, or be bound to structured objects through @ConfigurationProperties .

What does @bean annotation do in Spring?

Spring @Bean Annotation is applied on a method to specify that it returns a bean to be managed by Spring context. Spring Bean annotation is usually declared in Configuration classes methods. In this case, bean methods may reference other @Bean methods in the same class by calling them directly.


1 Answers

in addition to @Kevin's answer if you are using spring 3.0 it is possible to do this with the new spring expression language

<bean id="a" class="A">     <property name="list"         value="#{b.list}"/> </bean> 

spring 3.0 documentation

like image 109
Gareth Davis Avatar answered Sep 21 '22 09:09

Gareth Davis