Spring Framework Tutorial
Software Setup and Configuration (STS/Eclipse/IntelliJ)
Core Spring
Spring Annotations
Spring Data
Spring JDBC
Spring Security
Setter injection in Spring is a method by which the Spring container injects values into an object's properties via setter methods. When you want to inject literal values (like strings, numbers, etc.), you can use setter methods to accomplish this.
Let's explore how to inject literal values via setter injection:
1. Java Class with Setters:
public class ExampleBean { private String message; private int number; public void setMessage(String message) { this.message = message; } public void setNumber(int number) { this.number = number; } // getters and other methods... }
2. Spring XML Configuration:
<bean id="exampleBean" class="com.example.ExampleBean"> <property name="message" value="Hello, World!" /> <property name="number" value="42" /> </bean>
In the XML configuration, the property
elements with name
attributes matching the bean's property names are used to inject the specified literal values via the corresponding setter methods.
For Java-based configurations, you can use the @Bean
annotation to define the bean and set its properties:
@Configuration public class AppConfig { @Bean public ExampleBean exampleBean() { ExampleBean bean = new ExampleBean(); bean.setMessage("Hello, World!"); bean.setNumber(42); return bean; } }
In the Java-based configuration, after creating an instance of ExampleBean
, you're setting the properties using the provided setter methods.
When using annotation-driven configurations with component scanning, you can combine setter injection with the @Value
annotation:
@Component public class ExampleBean { private String message; private int number; @Value("Hello, World!") public void setMessage(String message) { this.message = message; } @Value("42") public void setNumber(int number) { this.number = number; } // getters and other methods... }
The @Value
annotation on the setter methods will instruct Spring to inject the provided literal values.
Injecting constants with setter injection in Spring:
Description: Constants, such as numeric values or string literals, can be injected into Spring beans using setter injection. This provides a way to externalize configuration or set fixed values after the bean is constructed.
Code Example:
public class MyBean { private int intValue; // Setter injection of a constant public void setIntValue(int intValue) { this.intValue = intValue; } // ... }
How to pass literal values through setters in Spring:
Description: Literal values, like strings or numeric constants, can be passed directly to setter methods during bean instantiation. This allows for flexibility and customization in setting initial values.
Code Example:
public class MyBean { private String stringValue; // Setter method with a literal value public void setStringValue() { this.stringValue = "Hello, World!"; } // ... }
Configuring setter injection with primitive values in Spring:
Description: Spring supports setter injection with primitive values, making it possible to inject numeric constants or other primitive types directly into a bean.
Code Example:
public class MyBean { private int intValue; // Setter injection with a primitive value public void setIntValue(int intValue) { this.intValue = intValue; } // ... }
Using @Value annotation for setter injection in Spring:
Description:
The @Value
annotation allows you to inject values from property files, system properties, or literals directly into setter methods, providing a way to externalize configuration.
Code Example:
public class MyBean { private String stringValue; // Setter injection using @Value @Value("${my.property}") public void setStringValue(String stringValue) { this.stringValue = stringValue; } // ... }
Setter injection with literals in Spring XML configuration:
Description:
In Spring XML configuration, setter injection with literals can be achieved by specifying the literal values directly within the <property>
element.
XML Configuration Example:
<bean id="myBean" class="com.example.MyBean"> <property name="stringValue" value="Hello, World!" /> </bean>
Injecting configuration properties through setters in Spring:
Description: Configuration properties can be injected into a bean using setter injection. This is particularly useful for injecting complex configuration settings.
Code Example:
public class MyBean { private AppConfig config; // Setter injection with configuration properties public void setConfig(AppConfig config) { this.config = config; } // ... }
Dynamic value injection using placeholders in Spring setters:
Description: Spring allows dynamic value injection using placeholders, which can be resolved from property files or system properties. This provides flexibility in configuring beans with values determined at runtime.
Code Example:
public class MyBean { private String stringValue; // Setter injection with placeholders @Value("${my.property}") public void setStringValue(String stringValue) { this.stringValue = stringValue; } // ... }
Examples of setter injection with literal values in Spring:
Example 1:
public class DatabaseConfig { private String url; // Setter injection with a literal value @Value("${database.url}") public void setUrl(String url) { this.url = url; } // ... }
Example 2:
public class MyService { private int maxRetryAttempts; // Setter injection with a numeric constant @Value("${retry.maxAttempts}") public void setMaxRetryAttempts(int maxRetryAttempts) { this.maxRetryAttempts = maxRetryAttempts; } // ... }