Spring ioc configuration snippet
2011-08-08 08:23
330 查看
IOC : Inversion of Control
DI :Dependency Injection
setter injection
<bean id="message" class="ioc.SetterInjection">
<property name="message" value="Spring is simple." />
</bean>
Constructor injection
<bean id="basic" class="ioc.ConstructorInjection">
<constructor-arg value="Hello Spring" />
</bean>
<bean id="springMessage" class="ioc.ConstructorInjection">
<constructor-arg type="java.lang.String" value="Rakesh Pandey" />
<constructor-arg type="int" value="101" />
</bean>
<bean id="springMessage" class="ioc.ConstructorInjection">
<constructor-arg index="0" value="Aakash Pandey" />
<constructor-arg index="1" value="1001" />
</bean>
Reference injection
<bean id="simpleMessage" class="java.lang.String">
<constructor-arg value="Spring is simple" />
</bean>
<bean id="message" class="ReferentialBean">
<property name="message" ref="simpleMessage" />
</bean>
<bean id="anotherBean" class="ioc.AnotherBean" />
<bean id="show" class="ioc.FirstBean">
<constructor-arg ref="anotherBean" />
</bean>
idref (可验证的)
<bean id="first" class="ioc.FirstBean">
<property name="message" value="Spring is simple."/>
</bean>
<bean id="another" class="ioc.AnotherBean">
<property name="amessage" >
<idref bean="first"/>
</property>
</bean>
inner bean
<bean id="outer" class="ioc.OuterBean">
<constructor-arg>
<bean class="ioc.InnerBean">
<property name="name" value="satya" />
<property name="address" value="patna" />
</bean>
</constructor-arg>
</bean>
list
<bean id="collegeBean" class="ioc.CollegeBean">
<property name="lists">
<list>
<value>1</value>
<ref bean="studentBean" />
<bean class="ioc.StudentBean">
<property name="name" value="ankit" />
<property name="address" value="delhi" />
</bean>
</list>
</property>
</bean>
Set
<bean id="collegeBean1" class="ioc.set.CollegeBean">
<property name="sets">
<set>
<value>1</value>
<value>1</value>
<value>1</value>
<value>1</value>
<ref bean="studentBean1" />
<bean class="ioc.set.StudentBean">
<property name="name" value="ankit" />
<property name="address" value="delhi" />
</bean>
</set>
</property>
</bean>
Props
<bean id="collegeBean3" class="collection.props.example.CollegeBean">
<property name="pros">
<props>
<prop key="roll">100</prop>
<prop key="name">satya</prop>
</props>
</property>
</bean>
Map
<bean id="mapbean" class="spring.map.example.MapBean">
<property name="details">
<map>
<entry key="Satya" value="101"/>
<entry key="Rohit" value="102"/>
<entry key="Aniket" value="103"/>
</map>
</property>
</bean>
Null值
<bean id="basic" class="spring.nullvalue.example.NullBean">
<property name="message">
<null />
</property>
</bean>
p-namespace (设置bean的field)
<bean id="basic" class="spring.pnamespace.example.SpringBean"
p:message="Message passing using p-namespace">
</bean>
lazy initialization
<bean id="addressBean" class="lazyinitialized.bean.example.Address"
lazy-init="true">
<property name="city" value="New Delhi" />
<property name="state" value="Delhi"/>
</bean>
autowiring by name
<bean id="college" class="spring.noautowiring.mode.College" autowire="byName">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
@Autowired
public void setStudent(Student student) {
this.student = student;
}
autowiring by Type
不是唯一的bean会报错(No unique bean of type is defined)
<bean id="college" class="ioc.autowire.College" autowire="byType">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
autowiring by Name
不是唯一的bean会报错(No unique bean of type is defined)
@Autowired
public College(Student student) {
this.student = student;
}
<bean id="college" class="ioc.autowire2.College" autowire="constructor">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
autowiring by autodetect
<bean id="college" class="ioc.autowire2.College" autowire="autodetect">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
autowire-candidate
The autowire-candidate attribute is set in the <bean/> element and when it is set to false the container excludes that specific bean from autowiring.
<bean id="college5"
class="spring.exclude.autwiring.College" autowire-candidate="false">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean
@required
@Required
public void setStudent(Student student) {
this.student = student;
}
<context:annotation-config />
Property 'student' is required for bean 'college'
scope="singleton" (默认、单例)
<bean id="simplebean1" class="ioc.singleton.SimpleBean" scope="singleton"/>
scope="prototype" (多次实例化)
<bean id="simplebean1" class="ioc.singleton.SimpleBean" scope="prototype"/>
inherit
The support of inheritance is present in the Spring framework and common values or configuration is shared among beans. The child bean inherits the properties and configuration of the parent bean or base bean.
<bean id="baseBean" class="bean.configuration.inheritance.Teacher">
<property name="subject" value="Science" />
</bean>
<bean id="TeacherBean" parent="baseBean">
<property name="student" ref="StudentBean" />
<property name="teachername" value="Rakesh" />
</bean>
inherit override
<bean id="baseBean" class="bean.configuration.inheritance.Teacher">
<property name="subject" value="Science" />
</bean>
<bean id="TeacherBean" parent="baseBean">
<property name="subject" value="Biology" />
<property name="student" ref="StudentBean" />
<property name="teachername" value="Rakesh" />
</bean>
dependency-check
It check for all bean's dependencies, that is expressed in its properties are satisfied or not.
<bean id="student1" class="spring.dependency.check.mode.StudentBean"
dependency-check="simple">
<property name="rollNo" value="101" />
</bean>
<bean id="student2" class="spring.dependency.check.mode.StudentBean"
dependency-check="objects">
<property name="nestedStudentBean" ref="nestedStudentBean" />
</bean>
<bean id="student3" class="spring.dependency.check.mode.StudentBean"
dependency-check="all">
<property name="nestedStudentBean" ref="nestedStudentBean" />
<property name="rollNo" value="101" />
</bean>
<bean id="nestedStudentBean"
class="spring.dependency.check.mode.StudentBean" />
Spring List Factory
Ths ListFactoryBean is a simple factory for shared List instance. The list element is defined in the xml bean definitions. The setSourceList method set the source List which is written in xml list element. The SetTargetListClass method set the class to use target List.
<bean id="week" class="list.factory.example.Week">
<property name="days">
<bean class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="targetListClass">
<value>java.util.ArrayList</value>
</property>
<property name="sourceList">
<list>
<value>Monday</value>
<value>Tuesday</value>
<value>Wednesday</value>
<value>Thursday</value>
<value>Friday</value>
<value>Saturday</value>
<value>Sunday</value>
</list>
</property>
</bean>
</property>
</bean>
Spring Set Factory
继承自AbstractFactoryBean
<bean id="week" class="set.factory.example.Week">
<property name="days">
<bean class="org.springframework.beans.factory.config.SetFactoryBean">
<property name="targetSetClass">
<value>java.util.HashSet</value>
</property>
<property name="sourceSet">
<list>
<value>Monday</value>
<value>Tuesday</value>
<value>Wednesday</value>
<value>Thursday</value>
<value>Friday</value>
<value>Saturday</value>
<value>Sunday</value>
</list>
</property>
</bean>
</property>
</bean>
Spring Map Factory
<bean id="week2" class="map.factory.example.Week">
<property name="days2">
<bean class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="targetMapClass">
<value>java.util.HashMap</value>
</property>
<property name="sourceMap">
<map>
<entry key="Key1" value="Sunday" />
<entry key="Key2" value="Monday" />
<entry key="Key3" value="Tuesday" />
<entry key="Key4" value="Wednesday" />
<entry key="Key5" value="Thursday" />
<entry key="Key6" value="Friday" />
<entry key="Key7" value="Saturday" />
</map>
</property>
</bean>
</property>
</bean>
Spring Date Property
Properties editors used to convert from String values to object types such as java.util.Properties.
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<bean class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg index="0">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="dd/MM/yyyy" />
</bean>
</constructor-arg>
<constructor-arg index="1" value="false" />
</bean>
</entry>
</map>
</property>
</bean>
<bean id="bean1" class="spring.date.propertya">
<property name="name" value="Rakesh" />
<property name="joiningDate" value="1/09/2010" />
</bean>
package spring.date.property;
import java.util.Date;
public class Employee {
private Date joiningDate;
private String name;
public Date getJoiningDate() {
return joiningDate;
}
public void setJoiningDate(Date joiningDate) {
this.joiningDate = joiningDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
CustomEditorConfigurer
Passing a date format in the bean property is not allowed and in order to do so you need to register the CustomDateEditor in CustomEditorConfigurer first so that it will convert the bean properties which type is java.util.Date
<bean id="dateEditor"
class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg>
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
</bean>
</constructor-arg>
<constructor-arg value="true" />
</bean>
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<ref local="dateEditor" />
</entry>
</map>
</property>
</bean>
@Component、@Repository、@Service、@Controller
@Component
public class StudentService {
@Autowired
StudentDAO studentDAO;
@Override
public String toString() {
return "StudentService [studentDAO=" + studentDAO + "]";
}
}
<context:component-scan base-package="ioc.component">
<context:exclude-filter type="regex"
expression="ioc\.component\.*Student.*" />
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>
DisposableBean InitializingBean marker interface
public class StudentService implements InitializingBean, DisposableBean {
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void afterPropertiesSet() throws Exception {
System.out.println(" After properties has been set : " + message);
}
public void destroy() throws Exception {
System.out.println("Cleaned everything!!");
}
}
org.springframework.context.ApplicationContextAware实现接口 自动装配
public class StudentBean implements ApplicationContextAware {
private ApplicationContext context;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
context = applicationContext;
System.out.println(applicationContext);
}
}
org.springframework.beans.factory.config.BeanPostProcessor 修改bean
class StudentBean implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("Initialized Bean : " + beanName);
return bean;
}
}
org.springframework.beans.factory.BeanNameAware 自动装配配置文件里该bean的ID
class StudentBean implements BeanNameAware {
private String name;
public void setBeanName(String name) {
this.name = name;
}
}
@PreDestroy @PostConstruct
@PostConstruct
public void initIt() throws Exception {
System.out.println("After properties has been set : " + test);
}
@PreDestroy
public void cleanUp() throws Exception {
System.out.println("Cleaned Everyting");
}
context.close();
<context:annotation-config/>
DI :Dependency Injection
setter injection
<bean id="message" class="ioc.SetterInjection">
<property name="message" value="Spring is simple." />
</bean>
Constructor injection
<bean id="basic" class="ioc.ConstructorInjection">
<constructor-arg value="Hello Spring" />
</bean>
<bean id="springMessage" class="ioc.ConstructorInjection">
<constructor-arg type="java.lang.String" value="Rakesh Pandey" />
<constructor-arg type="int" value="101" />
</bean>
<bean id="springMessage" class="ioc.ConstructorInjection">
<constructor-arg index="0" value="Aakash Pandey" />
<constructor-arg index="1" value="1001" />
</bean>
Reference injection
<bean id="simpleMessage" class="java.lang.String">
<constructor-arg value="Spring is simple" />
</bean>
<bean id="message" class="ReferentialBean">
<property name="message" ref="simpleMessage" />
</bean>
<bean id="anotherBean" class="ioc.AnotherBean" />
<bean id="show" class="ioc.FirstBean">
<constructor-arg ref="anotherBean" />
</bean>
idref (可验证的)
<bean id="first" class="ioc.FirstBean">
<property name="message" value="Spring is simple."/>
</bean>
<bean id="another" class="ioc.AnotherBean">
<property name="amessage" >
<idref bean="first"/>
</property>
</bean>
inner bean
<bean id="outer" class="ioc.OuterBean">
<constructor-arg>
<bean class="ioc.InnerBean">
<property name="name" value="satya" />
<property name="address" value="patna" />
</bean>
</constructor-arg>
</bean>
list
<bean id="collegeBean" class="ioc.CollegeBean">
<property name="lists">
<list>
<value>1</value>
<ref bean="studentBean" />
<bean class="ioc.StudentBean">
<property name="name" value="ankit" />
<property name="address" value="delhi" />
</bean>
</list>
</property>
</bean>
Set
<bean id="collegeBean1" class="ioc.set.CollegeBean">
<property name="sets">
<set>
<value>1</value>
<value>1</value>
<value>1</value>
<value>1</value>
<ref bean="studentBean1" />
<bean class="ioc.set.StudentBean">
<property name="name" value="ankit" />
<property name="address" value="delhi" />
</bean>
</set>
</property>
</bean>
Props
<bean id="collegeBean3" class="collection.props.example.CollegeBean">
<property name="pros">
<props>
<prop key="roll">100</prop>
<prop key="name">satya</prop>
</props>
</property>
</bean>
Map
<bean id="mapbean" class="spring.map.example.MapBean">
<property name="details">
<map>
<entry key="Satya" value="101"/>
<entry key="Rohit" value="102"/>
<entry key="Aniket" value="103"/>
</map>
</property>
</bean>
Null值
<bean id="basic" class="spring.nullvalue.example.NullBean">
<property name="message">
<null />
</property>
</bean>
p-namespace (设置bean的field)
<bean id="basic" class="spring.pnamespace.example.SpringBean"
p:message="Message passing using p-namespace">
</bean>
lazy initialization
<bean id="addressBean" class="lazyinitialized.bean.example.Address"
lazy-init="true">
<property name="city" value="New Delhi" />
<property name="state" value="Delhi"/>
</bean>
autowiring by name
<bean id="college" class="spring.noautowiring.mode.College" autowire="byName">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
@Autowired
public void setStudent(Student student) {
this.student = student;
}
autowiring by Type
不是唯一的bean会报错(No unique bean of type is defined)
<bean id="college" class="ioc.autowire.College" autowire="byType">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
autowiring by Name
不是唯一的bean会报错(No unique bean of type is defined)
@Autowired
public College(Student student) {
this.student = student;
}
<bean id="college" class="ioc.autowire2.College" autowire="constructor">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
autowiring by autodetect
<bean id="college" class="ioc.autowire2.College" autowire="autodetect">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean>
autowire-candidate
The autowire-candidate attribute is set in the <bean/> element and when it is set to false the container excludes that specific bean from autowiring.
<bean id="college5"
class="spring.exclude.autwiring.College" autowire-candidate="false">
<property name="registration" value="BL001" />
<property name="year" value="2001" />
</bean
@required
@Required
public void setStudent(Student student) {
this.student = student;
}
<context:annotation-config />
Property 'student' is required for bean 'college'
scope="singleton" (默认、单例)
<bean id="simplebean1" class="ioc.singleton.SimpleBean" scope="singleton"/>
scope="prototype" (多次实例化)
<bean id="simplebean1" class="ioc.singleton.SimpleBean" scope="prototype"/>
inherit
The support of inheritance is present in the Spring framework and common values or configuration is shared among beans. The child bean inherits the properties and configuration of the parent bean or base bean.
<bean id="baseBean" class="bean.configuration.inheritance.Teacher">
<property name="subject" value="Science" />
</bean>
<bean id="TeacherBean" parent="baseBean">
<property name="student" ref="StudentBean" />
<property name="teachername" value="Rakesh" />
</bean>
inherit override
<bean id="baseBean" class="bean.configuration.inheritance.Teacher">
<property name="subject" value="Science" />
</bean>
<bean id="TeacherBean" parent="baseBean">
<property name="subject" value="Biology" />
<property name="student" ref="StudentBean" />
<property name="teachername" value="Rakesh" />
</bean>
dependency-check
It check for all bean's dependencies, that is expressed in its properties are satisfied or not.
<bean id="student1" class="spring.dependency.check.mode.StudentBean"
dependency-check="simple">
<property name="rollNo" value="101" />
</bean>
<bean id="student2" class="spring.dependency.check.mode.StudentBean"
dependency-check="objects">
<property name="nestedStudentBean" ref="nestedStudentBean" />
</bean>
<bean id="student3" class="spring.dependency.check.mode.StudentBean"
dependency-check="all">
<property name="nestedStudentBean" ref="nestedStudentBean" />
<property name="rollNo" value="101" />
</bean>
<bean id="nestedStudentBean"
class="spring.dependency.check.mode.StudentBean" />
Spring List Factory
Ths ListFactoryBean is a simple factory for shared List instance. The list element is defined in the xml bean definitions. The setSourceList method set the source List which is written in xml list element. The SetTargetListClass method set the class to use target List.
<bean id="week" class="list.factory.example.Week">
<property name="days">
<bean class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="targetListClass">
<value>java.util.ArrayList</value>
</property>
<property name="sourceList">
<list>
<value>Monday</value>
<value>Tuesday</value>
<value>Wednesday</value>
<value>Thursday</value>
<value>Friday</value>
<value>Saturday</value>
<value>Sunday</value>
</list>
</property>
</bean>
</property>
</bean>
Spring Set Factory
继承自AbstractFactoryBean
<bean id="week" class="set.factory.example.Week">
<property name="days">
<bean class="org.springframework.beans.factory.config.SetFactoryBean">
<property name="targetSetClass">
<value>java.util.HashSet</value>
</property>
<property name="sourceSet">
<list>
<value>Monday</value>
<value>Tuesday</value>
<value>Wednesday</value>
<value>Thursday</value>
<value>Friday</value>
<value>Saturday</value>
<value>Sunday</value>
</list>
</property>
</bean>
</property>
</bean>
Spring Map Factory
<bean id="week2" class="map.factory.example.Week">
<property name="days2">
<bean class="org.springframework.beans.factory.config.MapFactoryBean">
<property name="targetMapClass">
<value>java.util.HashMap</value>
</property>
<property name="sourceMap">
<map>
<entry key="Key1" value="Sunday" />
<entry key="Key2" value="Monday" />
<entry key="Key3" value="Tuesday" />
<entry key="Key4" value="Wednesday" />
<entry key="Key5" value="Thursday" />
<entry key="Key6" value="Friday" />
<entry key="Key7" value="Saturday" />
</map>
</property>
</bean>
</property>
</bean>
Spring Date Property
Properties editors used to convert from String values to object types such as java.util.Properties.
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<bean class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg index="0">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="dd/MM/yyyy" />
</bean>
</constructor-arg>
<constructor-arg index="1" value="false" />
</bean>
</entry>
</map>
</property>
</bean>
<bean id="bean1" class="spring.date.propertya">
<property name="name" value="Rakesh" />
<property name="joiningDate" value="1/09/2010" />
</bean>
package spring.date.property;
import java.util.Date;
public class Employee {
private Date joiningDate;
private String name;
public Date getJoiningDate() {
return joiningDate;
}
public void setJoiningDate(Date joiningDate) {
this.joiningDate = joiningDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
CustomEditorConfigurer
Passing a date format in the bean property is not allowed and in order to do so you need to register the CustomDateEditor in CustomEditorConfigurer first so that it will convert the bean properties which type is java.util.Date
<bean id="dateEditor"
class="org.springframework.beans.propertyeditors.CustomDateEditor">
<constructor-arg>
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd" />
</bean>
</constructor-arg>
<constructor-arg value="true" />
</bean>
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.Date">
<ref local="dateEditor" />
</entry>
</map>
</property>
</bean>
@Component、@Repository、@Service、@Controller
@Component
public class StudentService {
@Autowired
StudentDAO studentDAO;
@Override
public String toString() {
return "StudentService [studentDAO=" + studentDAO + "]";
}
}
<context:component-scan base-package="ioc.component">
<context:exclude-filter type="regex"
expression="ioc\.component\.*Student.*" />
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Service" />
</context:component-scan>
DisposableBean InitializingBean marker interface
public class StudentService implements InitializingBean, DisposableBean {
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void afterPropertiesSet() throws Exception {
System.out.println(" After properties has been set : " + message);
}
public void destroy() throws Exception {
System.out.println("Cleaned everything!!");
}
}
org.springframework.context.ApplicationContextAware实现接口 自动装配
public class StudentBean implements ApplicationContextAware {
private ApplicationContext context;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
context = applicationContext;
System.out.println(applicationContext);
}
}
org.springframework.beans.factory.config.BeanPostProcessor 修改bean
class StudentBean implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("Initialized Bean : " + beanName);
return bean;
}
}
org.springframework.beans.factory.BeanNameAware 自动装配配置文件里该bean的ID
class StudentBean implements BeanNameAware {
private String name;
public void setBeanName(String name) {
this.name = name;
}
}
@PreDestroy @PostConstruct
@PostConstruct
public void initIt() throws Exception {
System.out.println("After properties has been set : " + test);
}
@PreDestroy
public void cleanUp() throws Exception {
System.out.println("Cleaned Everyting");
}
ConfigurableApplicationContext context;
context.close();
<context:annotation-config/>
相关文章推荐
- Spring IOC XML Configuration
- 第7章 IoC容器 V (Configuration) -- Spring4.3.8参考文档中文版
- Step-by-Step XML Free Spring MVC 3 Configuration--reference
- 【转-整理】Spring的Ioc理解,写的很通俗易懂
- Spring4深入理解IOC&DI03----Bean配置--SpEL,IOC 容器中 Bean 的生命周期
- Spring IoC
- Spring学习笔记之基础、IOC、DI(1)
- Spring学习——(二)IOC、DI以及常用xml配置
- Spring 框架简介(Spring AOP 和 IOC 容器入门)
- Liferay portlet or standalone app loads/overrides external spring configuration file of a jar
- Spring Boot核心原理-自动配置 以及@ConfigurationProperties 注解
- 谈谈对Spring IOC的理解
- Spring 实践 -IoC
- Spring IOC例子详解
- Spring IOC与DI入门讲解
- Spring IOC(无反射无框架、无代理无框架)
- Spring的Ioc和DI依赖注入的理解
- Spring中bean注入初始化方式—通过注解@Configuration @bean
- Spring学习之IOC
- Spring中的IOC/AOP 原理