Java Specification Request JSR 250
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="pointC" class="com.mugil.shapes.Point">
<property name="x" value="20"/>
<property name="y" value="0"/>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="constant.properties"></property>
</bean>
<bean class="com.mugil.shapes.Circle" id="circleId">
</bean>
<context:annotation-config/>
</beans>
circle.java
public class Circle implements Shape{
private Point center;
@Override
public void drawShape() {
System.out.println("Shape of Circle ");
System.out.println("Center of Cirlce "+ getCenter().getX() + " - " + getCenter().getY());
}
public Point getCenter() {
return center;
}
@Resource(name="pointC")
public void setCenter(Point center) {
this.center = center;
}
@PostConstruct
public void initilizeMe()
{
System.out.println("Initialized");
}
@PreDestroy
public void destroyMe()
{
System.out.println("Derstroyed");
}
}
If name is not specified after the @Resource it will look for same name matching bean in the spring.xml file.
@PostConstruct and @PreDestroy will be called when circle bean is initialized and destroyed
Defining Bean using Annotations
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.mugil.shapes"/>
</beans>
circle.java
@Component
public class Circle implements Shape
{
.
.
}
drawingApp.java
public class DrawingApp {
public static void main(String[] args) {
AbstractApplicationContext objContext = new ClassPathXmlApplicationContext("spring1.xml");
objContext.registerShutdownHook();
Shape objShape = (Shape)objContext.getBean("circle");
.
.
}
Using MessageSource
spring.xml
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>constant</value>
</list>
</property>
</bean>
constant.properties
TestMessage=Mugil
DrawingApp.java
AbstractApplicationContext objContext = new ClassPathXmlApplicationContext("spring1.xml");
System.out.println(objContext.getMessage("TestMessage", null, "Default Message", null));
Output
Mugil
Using instance of Message Source in Bean Class
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>constant</value>
</list>
</property>
</bean>
<context:annotation-config/>
<context:component-scan base-package="com.mugil.shapes"/>
</beans>
circle.java
@Component
public class Circle implements Shape{
private Point center;
@Autowired
private MessageSource messageSource;
@Override
public void drawShape() {
System.out.println("Shape of Circle ");
System.out.println(this.messageSource.getMessage("TestMessage", null, "Vannan", null));
}
public Point getCenter() {
return center;
}
@Resource(name="pointC")
public void setCenter(Point center) {
this.center = center;
}
public MessageSource getMessageSource() {
return messageSource;
}
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
}
this.messageSource.getMessage(“TestMessage”, null, “Vannan”, null)
Variable substitution in Message Source
circle.java
@Component
public class Circle implements Shape{
private Point center;
@Autowired
private MessageSource messageSource;
@Override
public void drawShape() {
System.out.println("Center of Cirlce"); System.out.println(this.messageSource.getMessage("TestMessage2", new Object[]{center.getX(), center.getY()}, "Vannan", null));
}
.
.
.
}
this.messageSource.getMessage(“TestMessage2”, new Object[]{center.getX(), center.getY()}, “Vannan”, null)
constant.properties
TestMessage=Mugil
TestMessage2=Center of Circle : ({0}, {1})