How to inject value into bean properties in Spring

In Spring, there are three ways to inject value into bean properties.

  • Normal way
  • Shortcut
  • “p” schema

See a simple Java class, which contains two properties – name and type. Later you will use Spring to inject value into the bean properties.


package com.mkyong.common;

public class FileNameGenerator 
{
	private String name;
	private String type;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
}

1. Normal way

Inject value within a ‘value’ tag and enclosed with ‘property’ tag.


<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-2.5.xsd">

	<bean id="FileNameGenerator" class="com.mkyong.common.FileNameGenerator">
		<property name="name">
			<value>mkyong</value>
		</property>
		<property name="type">
			<value>txt</value>
		</property>
	</bean>
</beans>

2. Shortcut

Inject value with “value” attribute.


<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-2.5.xsd">

	<bean id="FileNameGenerator" class="com.mkyong.common.FileNameGenerator">
		<property name="name" value="mkyong" />
		<property name="type" value="txt" />
	</bean>
	
</beans>

3. “p” schema

Inject value by using “p” schema as an attributes.


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="FileNameGenerator" class="com.mkyong.common.FileNameGenerator" 
             p:name="mkyong" p:type="txt" />
	
</beans>

Remember declares the xmlns:p=”http://www.springframework.org/schema/p in the Spring XML bean configuration file.

Conclusion

Which methods to use is totally base on personal preference, it will not affect the value inject into the bean properties.

18 comments on “How to inject value into bean properties in Spring

  1. I want to add <property> based on condition. How to do that? any info

    Reply
  2. Did you copy that beans xmlns tag and if u did where did you copied from or you have to write that everytime in new project

    Reply
  3. Remember to put getters and setters on your bean class.

    Reply
  4. I think you need to take out “p” name space in the tutorial. xmlns:p=”http://www.springframework.org/schema/p” is no longer available.

    Reply
  5. And where is the Injection??? THIS IS JUST *** THAT ARE JUST SCHMEMAS!

    Reply
  6. Just superb tutorial!!! Amazine tutorial content

    Reply
    1. yes,point to nothing ,i just wonder why too.

      Reply
  7. Hello,
    It is first time for me to read here, you are doing a great job.

    Reply
  8. Super Article

    Makes life easy

    One small doubt how to i set ref- properties with p schema.

    Thanks

    Reply
    1.  
      <bean id="john-classic" class="com.example.Person"> 
          <property name="name" value="John Doe"/> 
          <property name="spouse" ref="jane"/> 
      </bean> 
      <bean name="jane" class="com.example.Person"> 
          <property name="name" value="John Doe"/> 
      </bean>
      <bean id="john-classic" class="com.example.Person" 
          p:name="John Doe" 
          p:spouse-ref="jane"/> 
      </bean> 
      <bean name="jane" class="com.example.Person" 
          p:name="John Doe"/> 
      </bean>
      
      Reply
  9. We simple say WOW WOW WOW !! Man you are doing wonderful job again and again ….
    We are your fan now…

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *