1.
Bean 工厂(BeanFactory)的功能和配置
I、
ClassPathResource
l 在类路径下查找资源
l 另有 FileSystemResource
II、
XmlBeanFactory
l 读取 xml
文件中的配置信息
l 生产bean
l 解决bean
依赖
2.
Bean 的创建
spring可调用bean的构造方法,或通过工厂方法生产 bean对象
I、 利用 bean
的构造方法创建bean
l 无参的构造方法(通过set方法设置,一定要有set方法)
<bean id="refName" class="com.xasxt.UserDao">
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
|
l 有参的构造方法,需指明构造方法的参数列表,通过:
<bean id="refName" class=" com.xasxt.UserDao ">
<construct-arg><value>root</value></construct-arg>
<construct-arg><value>123</value></construct-arg>
</bean>
表明调用了有两个参数的构造方法
|
II、 通过工厂方法获得 bean对象
bean 没有公共的构造方法,需通过工厂类或工厂实例来创建
分为静态工厂和实例工厂方法两种情况
l 静态工厂方法:
class 指明工厂类,factory-method
指明工厂方法如:
Connection con=DriverManager.getConnection(url,user,pwd);
对应的配置:
<beanid="con" class="java.sql.DriverManager" factory-method="getConnection"> <construct-arg><value>jdbc:mysql://localhost/test</value></construct-arg>
<construct-arg><value>zhangsan</value></construct-arg>
<construct-arg><value>pwd</value></construct-arg>
</bean>
工厂方法参数和构造方法参数设置的形式相同
|
l 实例工厂方法:
要先创建工厂实例,然后再由工厂实例创建产品
如: Statement stmt = con.createStatement();
con 对象是工厂
stmt 对象是产品
配置为:
<bean id="con" class="java.sql.DriverManager" factory-method="getConnection">
……
</bean>
<bean id="stmt" factory-bean="con" factory-method="createStatement"/>
|
3.
Bean的作用域
Bean作用域(scope属性)
作用域
|
描述
|
singleton
|
在每个Spring IoC容器中一个bean定义对应一个对象实例。
|
prototype
|
一个bean定义对应多个对象实例。
|
request
|
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。
|
session
|
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
|
global session
|
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。
|
bean工厂生产bean
缺省都是单例的(singleton)
后两者用于web应用中
4. 通过注入解决bean的依赖
I、 依赖注入的两种方式
l
set 注入
spring 直接利用了bean的set或构造方法
避免了使用接口注入的侵入性
<bean
id="person"
class="com.xasxt.spring.Person">
<!-- set方法设置注入 -->
<property
name="id"
value="001"/>
<property
name="name"
value="zhangsan"/>
<property
name="sex"
value="M"/>
<property
name="mari"
value="false"/>
<property
name="salary"
value="4500"/>
</bean>
|
l 构造方法注入
<bean
id="person"
class="com.xasxt.spring.Person">
<!--
构造方法的方式注入 -->
<constructor-arg>
<value>002</value>
</constructor-arg>
<constructor-arg>
<value>lisi</value>
</constructor-arg>
<constructor-arg>
<value>false</value>
</constructor-arg>
<constructor-arg>
<value>M</value>
</constructor-arg>
<constructor-arg>
<value>5000</value>
</constructor-arg>
</bean>
|
II、 依赖的目标类型分成三种形式:
l 基本类型+String
<value>data</value>
类型自动转化
l 对其他bean的引用
<bean
id="prop"
abstract="true"><!—只作为模板,不能被实例化-->
<property
name="address"
value="beijing"></property>
</bean>
<!—上面是公共属性注入,下面可以引用-->
<bean
id="stu"
class="com.xasxt.dependency.Student"
parent="prop"><!—可以引用公共属性-->
<property
name="name"
value="zhangsan"></property>
<property
name="code"
value="01101"></property>
</bean>
<bean
id="tea"
class="com.xasxt.dependency.Teacher"
parent="prop"><!—可以引用公共属性-->
<property
name="name"
value="Li Sir"></property>
<property
name="job"
value="java teacher"></property>
</bean>
<!-- 普通装配 -->
<bean id="c" class="com.xasxt.dependency.Class">
<property name="name" value="class One"></property>
<property name="teacher" ref="tea"></property>
<property name="stus">
<list>
<ref bean="stu"/>
</list>
</property>
</bean>
|
l 集合类型
Set
<property
name="sets">
<set>
<value>wangso</value>
<value>haoren</value>
<value>ganka</value>
</set>
</property>
|
Array和List同样设置
List
Map
<property
name="map">
<map>
<entry
key="aaa">
<value>7688</value>
</entry>
<entry
key="bbb">
<value>9788</value>
</entry>
<entry
key="ccc">
<value>8769</value>
</entry>
</map>
</property>
|
III、 让spring
自动装配bean,解决依赖
autowire属性指明自动装配的依据:
byName--- id的值=bean中的property名
byType--- 属性的类型=当前工厂中bean的类型
constructor--构造方法参数的类型=当前工厂中bean的类型
autodetect-- constructor ---> byType
autowire-candidate属性
指明是否作为 autowire 的候选对象(true或false)
解决多个候选对象的冲突
|
IV、 让容器检测 bean
所有的依赖是否都已经满足
防止bean的遗漏装配,在运行后出现莫名奇妙的情况,可以设置下列属性
dependency-check属性指明应检查的目标类型
simple -- 基本类型+字符串+集合
objects --- 对其他bean的依赖
all---对各类型都检查
none -- 默认值
|
V、 通过classpath自动扫描方式把组件纳入spring容器中管理
1、需要在文件中加入下面一句配置:
<context:component-scan base-package="com.xasxt.spring"/>
黄色是包名
2、还需要在各个类中加入下列注解之一:
@Service @Controller @Repository @Component
约定优于配置
分享到:
相关推荐
① IoC(Inverse of Control)–> 控制反转 IoC理念: 对象的创建工作交给IoC容器 对象间的依赖关系交给IoC容器查找,在运行期间确定 依赖注入是IoC的主要实现方式 IoC的实现机制: 工厂模式 + 反射机制:工厂模式...
IOC(Inverse of Control控制反转):从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建...
Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。 提供了展现层 SpringMVC和持久层 Spring ...
Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring ...
Elite Container是DELPHI下的一个轻量级IoC对象容器(IoC:Inverse of Control,反转控制)。它是参考了Java中的Spring框架(主要是配置文件的写法),并结合DELPHI的特点来构建的。相比Spring的对象容器,它提供的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 Spring MVC框架:Spring MVC是基于Spring框架的Web...
Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 SpringMVC 和持久层 Spring JDBC ...
IOC容器,Inverse Of Control 控制反转。 额外: 事务管理。 对DAO的支持,主要JDBC、Hibernate、OJB。。。。。。 Mail支持,发送电子邮件 安全控制。 视图展示。(JSP、XML和XSLT、PDF、Excel) 计时服务。 整合Web...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...
它包括IoC(Inverse of Control,控制反转)容器、AOP(Aspect-Oriented Programming,面向切面编程)等特性,可以简化开发过程、提高代码的可维护性和可测试性。 2. Spring MVC框架:Spring MVC是基于Spring框架的...