Spring IoC(控制反转)【一】
2014-07-29 09:16
113 查看
需要使用的IoC对象
Spring中需要使用的IoC容器管理的bean都与实际应用的对象一一对应,但是并不是所有对象都需要在IoC中进行管理,
常见的需要使用IoC进行管理的对象有如下几种:
1、服务层对象
服务层对象封装了业务逻辑,用来实现应用中的业务逻辑,称为服务类,往往需要在IoC容器中进行管理。
2、数据访问对象
数据访问对象封装了数据访问逻辑,需要在IoC容器中进行管理。
3、表示层对象
某些表示层对象也常常需要在IoC容器中进行管理,例如Struts2框架中的Action类。
4、工厂类对象
某些工厂类对象常常需要使用IoC容器进行管理,例如Hibernate框架的SessionFactory工厂对象。
5、JMS的Queue、Topic对象
消息处理中的Queue以及Topic对象也常常需要在IoC容器中进行管理。
值得注意的是,并不是只有上述的对象可以使用IoC容器管理,任何对象都可以使用IoC管理。
然而,在实际JavaEE应用中,上述几种对象使用IoC管理的情况较多。
如何实例化bean
使用IoC容器管理bean,主要包括实例化bean以及装配bean两个方面。
装配bean之前,首先需要能够实例化bean才行。
在applicationContext.xml中指定IoC容器实例化bean对象的不同方法。
IoC容器通常有以下三种实例化bean的方法:
1、通过无参构造方法实例化
如果在配置文件中只使用id和class属性配置bean,则默认调用类的无参构造方法实例化
2、通过静态工厂方法实例化
有些类中提供了静态工厂方法返回实例,假设Course类中有如下静态工厂方法:
3、通过非静态工厂方法实例化
有些类中可能提供了非静态工厂方法返回实例,假设存在一个类CoureseFactory,其中提供了非静态的工厂方法以返回Course实例
setter注入和构造器注入
对象实例化后,往往需要对其依赖的属性进行赋值,称为依赖注入。
Spring中主要有两种注入方法,即setter注入和构造器注入。
setter注入:
例Course类中存在如下setter方法:
属性值使用<value>元素指定,通过<value>元素指定的都是内置类型的值,如Integer、double、String等类型,
例如上述配置中<value>1</value>将把值作为实际参数传给setId方法对属性赋值。
构造方法注入:
例Course类中有如下构造方法:
上述配置信息中,<constructor-arg>表示构造方法的参数,index表示构造方法中参数的索引值,例如<constructor-arg index="0">表示构造方法的第一个参数。
<value>元素用来指定构造方法的参数值,和<property>的子元素<value>一样,只能用来赋值内置类型的值。
在实际应用开发中,使用setter方式注入的情况较多因为构造方法注入的方式容易产生混淆和歧义。
Spring中需要使用的IoC容器管理的bean都与实际应用的对象一一对应,但是并不是所有对象都需要在IoC中进行管理,
常见的需要使用IoC进行管理的对象有如下几种:
1、服务层对象
服务层对象封装了业务逻辑,用来实现应用中的业务逻辑,称为服务类,往往需要在IoC容器中进行管理。
2、数据访问对象
数据访问对象封装了数据访问逻辑,需要在IoC容器中进行管理。
3、表示层对象
某些表示层对象也常常需要在IoC容器中进行管理,例如Struts2框架中的Action类。
4、工厂类对象
某些工厂类对象常常需要使用IoC容器进行管理,例如Hibernate框架的SessionFactory工厂对象。
5、JMS的Queue、Topic对象
消息处理中的Queue以及Topic对象也常常需要在IoC容器中进行管理。
值得注意的是,并不是只有上述的对象可以使用IoC容器管理,任何对象都可以使用IoC管理。
然而,在实际JavaEE应用中,上述几种对象使用IoC管理的情况较多。
如何实例化bean
使用IoC容器管理bean,主要包括实例化bean以及装配bean两个方面。
装配bean之前,首先需要能够实例化bean才行。
在applicationContext.xml中指定IoC容器实例化bean对象的不同方法。
IoC容器通常有以下三种实例化bean的方法:
1、通过无参构造方法实例化
如果在配置文件中只使用id和class属性配置bean,则默认调用类的无参构造方法实例化
<bean id="customer" class="vo.Customer"></bean>上述配置将调用Customer类的无参构造方法创建Customer实例。
2、通过静态工厂方法实例化
有些类中提供了静态工厂方法返回实例,假设Course类中有如下静态工厂方法:
public static Course createCourse(){ System.out.println("invoke createCourse()"); return new Course(); }在配置文件中可以使用factory-method属性调用该静态工厂方法,创建Course实例,代码如下:
<bean id="course" class="vo.Course" factory-method="createCourse"></bean>
3、通过非静态工厂方法实例化
有些类中可能提供了非静态工厂方法返回实例,假设存在一个类CoureseFactory,其中提供了非静态的工厂方法以返回Course实例
public class CourseFactory{ public Course createCourse(){ System.out.println("invoke CourseFactory createCourse()"); return new Course(); } }通过下面的配置,可以调用CourseFactory的createCourse工厂方法创建Course实例:
<bean id="courseFactory" class="factory.CourseFactory" ></bean> <bean id ="course" class ="vo.Course" factory-method="createCourse" factory-bean="courseFactory"></bean>上述配置文件中,先实例化了工厂类CourseFactory的实例courseFactory,然后通过factory-bean指定使用该工厂bean,并通过factory-method指定使用工厂方法createCourse实例化Course的实例。
setter注入和构造器注入
对象实例化后,往往需要对其依赖的属性进行赋值,称为依赖注入。
Spring中主要有两种注入方法,即setter注入和构造器注入。
setter注入:
例Course类中存在如下setter方法:
public void setId(){ this.id=id; }在配置文件的bean元素下,可以使用property元素指定属性名,进而调用对应的setter方法注入具体值
<bean id="course" class="vo.Course"> <property name="id"> <value>1</value> </property> </bean>上述配置信息中,property的name属性值必须与setter方法名对应,规则与JavaBean相同,即property的name值是对应的setXXX方法名的set后的单词,且首字母必须小写。
属性值使用<value>元素指定,通过<value>元素指定的都是内置类型的值,如Integer、double、String等类型,
例如上述配置中<value>1</value>将把值作为实际参数传给setId方法对属性赋值。
构造方法注入:
例Course类中有如下构造方法:
public Course(Integer id,String title,double price){ super(); this.id=id; this.title=title; this.price=price; }配置文件中可以通过如下配置,使用上述构造方法对Course实例注入属性:
<bean id="course" class="vo.Course"> <constructor-arg index="0"> <value>4</value> </constructor-arg> <constructor-arg index="1"> <value>Java</value> </constructor-arg> <constructor-arg index="2"> <value>1000</value> </constructor-arg> </bean>
上述配置信息中,<constructor-arg>表示构造方法的参数,index表示构造方法中参数的索引值,例如<constructor-arg index="0">表示构造方法的第一个参数。
<value>元素用来指定构造方法的参数值,和<property>的子元素<value>一样,只能用来赋值内置类型的值。
在实际应用开发中,使用setter方式注入的情况较多因为构造方法注入的方式容易产生混淆和歧义。
相关文章推荐
- Spring控制反转(IoC)的理解
- 关于spring的两个概念:IoC(控制反转) ,DI(依赖注入)
- Spring -- 控制反转IoC/依赖注入DI的实现
- java+spring切面编程(aop)spring控制反转(ioc)+hibenrate对象关系映射(ORM) 学习网址
- SPRING--Spring中IOC(反转控制) 和 AOP(面向方面编程)
- Spring-----> IOC(控制反转)
- Spring控制反转(IoC)的理解
- Spring Core---------IoC控制反转
- spring IOC控制反转,实现action的配置
- Spring之控制反转(IoC)
- spring反转控制IOC或依赖注入之简单示例
- Spring.Net学习 控制反转(IoC)和面向切面编程(AOP)
- Spring之控制反转(IoC)
- Spring Core---------IoC控制反转
- Spring 控制反转(IoC)容器
- Spring控制反转(IoC)的理解
- Spring核心技术(1)控制反转(Inversion of Control,IoC)理论
- 从简单实例了解Spring的控制反转IoC(Inversion of Control)
- Spring控制反转(IoC)的理解
- Spring入门 02 - 控制反转IoC