Spring provides dependency injection capabilities using Setter injection, or Constructor injection. Object models can then be declaratively represented in XML. Here’s a Setter injection based example using the property
element:
<bean name="shaker" class="net.bencode.model.Shaker">
<property name="proteinPowder" ref="proteinPowder" />
</bean>
<bean name="proteinPowder" class="net.bencode.model.ProteinPowder">
<property name="grams" ref="120" />
</bean>
Or if XML isn’t your thing, annotations are also an option, using a combination of @Component
and @Autowired
.
@Component
public class Shaker {
@Autowired
private ProteinPowder proteinPowder;
...
}
@Component
public class ProteinPowder {
private int grams;
...
}
Constructor injection is similarly defined using the constructor-arg
element. The following example works if the Shaker class has a constructor that takes in a ProteinPowder instance:
<bean name="shaker" class="net.bencode.model.Shaker">
<constructor-arg index="0" ref="proteinPowder" />
</bean>
<bean name="proteinPowder" class="net.bencode.model.ProteinPowder">
<property name="grams" ref="120" />
</bean>