A bean usually have some private properties that can be accessed through a pair of accessor methods, the setters and getters. These setters, the setXXX()
method can be used by Spring Framework to configure the beans.
This method of injecting beans property through their setter methods is called the setter injection. The following example will show you how to do it.
Below is our DrawingBean
that have colour and shape properties. In the example we will inject both of the properties using their respective setter method. The configuration is done in the Spring application configuration file.
package org.kodejava.spring.core;
public class DrawingBean {
private String colour;
private Shape shape;
public DrawingBean() {
}
public void drawShape() {
getShape().draw();
System.out.printf("The colour is %s.", getColour());
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
public Shape getShape() {
return shape;
}
public void setShape(Shape shape) {
this.shape = shape;
}
}
We can inject a simple value into a bean, such as string, number, etc. We can also inject a reference to another bean. Here we define an example of other bean, the Rectangle
bean that we will inject into the DrawingBean
.
package org.kodejava.spring.core;
public interface Shape {
/**
* Draw a shape.
*/
void draw();
}
package org.kodejava.spring.core;
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle.");
}
}
Let’s create the Spring application configuration file that will register our beans into the Spring context. After that we just create a simple program to execute it.
<?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.xsd">
<bean id="rectangle" class="org.kodejava.spring.core.Rectangle" />
<bean id="drawingBean" class="org.kodejava.spring.core.DrawingBean">
<property name="colour" value="Red" />
<property name="shape" ref="rectangle" />
</bean>
</beans>
In the configuration file above you can see that we use the property
element to set a bean’s property. The name
attribute is referring to the bean’s setter methods name, exclude the set
prefix.
The value
attribute of the property
element is used to inject a simple value, such as string, int, etc. For injecting a reference to another bean we use the ref
attribute instead.
package org.kodejava.spring.core;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DrawingBeanDemo {
public static void main(String[] args) {
try (var context = new ClassPathXmlApplicationContext("drawing-bean.xml")) {
DrawingBean bean = (DrawingBean) context.getBean("drawingBean");
bean.drawShape();
}
}
}
Here are the output of our example:
Drawing a rectangle.
The colour is Red.
Maven Dependencies
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.23</version>
</dependency>
</dependencies>
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024