Spring(二)Bean入门
一、BeanFactory介绍
1.1、Bean:
- 在Spring技术中是基于组件的
- 最基本了是最常用的单元
- 其实实例保存在Spring的容器当中
Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行管理,Bean的实例可以通过Beanfactory进行访问,实际上大部分J2EE应用,Bean是通过ApplicationContext来访问的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory强大许多
1.2、BeanFactory作用
- 配置、创建以及管理Bean对象
- 维持Bean对象之间的依赖关系
- 负责Bean对象的生命周期
BeanFactory常用方法:
- containsBean(String beanname)
- Object getBean(String beanName)
通常使用XmlBeanFactory类来实现
1.3、ApplicationContext
- 读取Bean定义文件
- 维护Bean之间的依赖关系
- 国际化的支持
- 资源文件的读取getRource()方法可以轻松读取Rource对象
- 事件传播
- 多配置文件加载
二、Bean定义
2.1、基本组成
配置文件
- <beans/>是Sring配置文件的根节点
- 一个<beans/>节点里面可以有多个<bean>节点
定义<bean>节点时,通常要指定两个属性
id:用来指明bean的标识符,这个标识符具有唯一性,Spring对bean的管理以及bean之间这种依赖关系都需要这个属性
class: 指明该bean的具体实现类,这里不能是接口(可以是接口实现类)全路径包名.类名
Bean在Spring容器中两种行为(通过scope来设置默认不写为singelton)
singleton:单实例模式(默认,构造方法为private),整个Spring的容器中只有一个共享实例存在(singleton)
non-singelton:每次请求该bean,Spring容器都会新建立一个bean实例,然后返回给程序(request,session,prototype)
2.2、创建Bean
Bean的命名:
按照Java中的命名规范即可,使用清晰的,描述性的,一致的命名规范
Bean的命名机制:
id 当在Spring的窗口当中,查找某个Bean对象时,首先根据id进行查找,将其余作为Bean的默认名称,如果ID属性不存在,则根据Name属性进行查找(将其中的第一个名称作为默认的名称),如果ID和NAME都不存在根据类的名称进行查找
id---------->name--------------->类名
<bean id="id1" class="实现类"></bean>
<bean name="id1" class="实现类"></bean>
<bean class="实现类"></bean>
Bean的别名:
通过alias属性指定:
<alias name="指定关联的Bean的名称fromname" alias="该关联类的别名的名称toname"/>
2.3、创建Bean步骤
创建XML文件----写入配置信息---生成Bean类----加入Bean到配置文件
三、Bean注入
3.1、基本类型和String
- 用到Value元素
- XML解析器以String类型解析出数据
如果属性不是String类型,属性值会通过PropertyEditors转换为其他类型
3.2、注入Bean
-ref元素进行标识
Ref元素通常有两个属性:
bean:指定不在同一个XML文件中的bean的id
<bean id="test" class="com.pb.test">
<property name="user">
<ref bean="其他的bean的id"/>
</property>
</bean>
local:指定在同一个XML文件中的bean的id
<bean id="test" class="com.pb.test">
<property name="user">
<ref bean="相同的XML文件中的bean的id"/>
</property>
</bean>
value和ref的区别:
使用ref元素,可以让Spring在部署时验证依赖的Bean是否真实存在
使用value元素,进行指定仅在创建Bean实例时做验证,会导致错误的延时出现,而且还会带来额外的类型转制开销
3.3、集合注入
List:
<bean id="test" class="com.pb.test">
<property name="lists">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
</bean>
Map:
<bean id="test" class="com.pb.test">
<property name="map">
<map>
<entry key="key1">
<value>value1</value>
</entry>
<entry key="key2">
<value>key2</value>
</entry>
</map>
</property>
</bean>
props:
<bean id="test" class="com.pb.test">
<property name="props">
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
</props>
</property>
</bean>
set:
< property name ="interest" >
< set >
< value > 唱歌 </ value >
< value > 跳舞 </ value >
< value > 书法 </ value >
</ set >
</ property >
3.4、自动绑定
通过autowire属性来设置
no:默认的。默认为不绑定
byName:根据属性名称自动进行绑定
byType:根据属性类型自动进行绑定
四、Bean的作用域
- singleton:(单实例模式)spring容器只会存在一个共享的bean实例,并且所有针对该bean的请求只会返回同一个bean实例。
- propertype(no-singleton):对每一次针对该bean的请求都会生成一个新的bean实例。 相当于java中的new 操作。定义为propertype的bean其生命周期很长,不易回收,通常要额外的处理。
- request:针对每一次的http请求都会产生一个新的bean实例,Bean仅在当前的http request范围内有效
- session:针对每一次的http请求都会产生一个新的bean实例,Bean仅在当前的http session范围内有效
五、Bean管理生命周期
5.1、Bean的生命周期


5.2、生命周期管理
两个时机
Spring可以管理实例化bean之间以及销毁之前的行为
注入依赖关系之后:
- 使用init-method属性:通过指定init-method属性,确定某个方法应该在Bean依赖关系结束之后执行。这种方式无需要将代码与Spring的接口耦合在一起代码污染极小。通常在bean当中进行方法定义如init()方法,然后在配置文件Bean元素中加入init-method属性来实现这个过程。
- 实现InnitializingBean接口:这种方式无须指明init-method属性,当窗口依赖注入以后,会自动调用afterPropertiesSet方法,它和init-method执行效果一样,但这种方式属于侵入性的代码设计不推荐使用
销毁Bean之前:
- destroy-method:用于在执行Bean销毁之前所执行的方法,这种方式和init-method一样无压需要代码与Spring的接口耦合在一起代码污染极小。在bean中加入destory-method属性和实现这个过程
- 实现DisposeableBean接口:无需要指明destory-method属性,当容器依赖注入以后,会自动调用destroty方法,属于侵入性代码设计不推荐使用
六、Bean的继承
Bean的继承:
什么是Bean继承呢?继承是指子bean可以从父bean继承配置信息,也可以覆盖特定的配置信息,或者在父bean的基础之上加入新的配置信息,其实质类似于java中的子类与父类的继承关系,利用继承可以节省很多配置工作,在实际的项目应用中,共有的配置会配置成模板,供子bean继承,如果2个bean之间配置信息大致相同,可以采用bean的继承来减少配置工作。
Bean的模板:
在Spring中既然要将公用的配置,配置称模板,这个模板不需要被实例化,而仅仅作为子bean的模板来使用,但在ApplicationContext或者BeanFactory默认会初始化所有的bean.
使用abstract属性,该属性可以阻止模板被实例化
abstract="true"时,表示该bean是抽象的bean,不能被初始化。
Spring(二)Bean入门的更多相关文章
- Spring(二)之入门示例
任何编程技术,特别是入门示例,通常都是Hello World,在这里我也遵循这个业界公认的原则. 这里我使用的maven项目,大家如果想要演示,建议使用Eclipse(含maven插件)或Idea(含 ...
- Spring二 Bean详解
Bean详解 Spring框架的本质其实是:通过XML配置来驱动Java代码,这样就可以把原本由java代码管理的耦合关系,提取到XML配置文件中管理.这样就实现了系统中各组件的解耦,有利于后期的升级 ...
- [Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.
前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...
- Spring Boot快速入门(二):http请求
原文地址:https://lierabbit.cn/articles/4 一.准备 postman:一个接口测试工具 创建一个新工程 选择web 不会的请看Spring Boot快速入门(一):Hel ...
- Spring系列(二) Bean装配
创建应用对象之间协作关系的行为称为装配(wiring), 这也是DI的本质. Spring中装配Bean的方式 Spring提供了三种装配Bean的方式. 隐式的Bean发现机制和自动装配 Java ...
- spring(二、bean生命周期、用到的设计模式、常用注解)
spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...
- Spring学习(二)Spring的bean管理(XML)
Bean的实例化方式 1.在Spring里面通过配置文件创建对象 2.bean实例化的三种方式第一种:使用类的无参数构造函数创建(最常用的方式,第2种和第3种方法一般不用) 如果类里面没有无参的构造函 ...
- Spring入门(五):Spring中bean的作用域
1. Spring中bean的多种作用域 在默认情况下,Spring应用上下文中所有的bean都是以单例(singleton)的形式创建的,即不管给定的一个bean被注入到其他bean多少次,每次所注 ...
随机推荐
- Linux下查看tcp连接数及状态
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ TIME_WAIT 8947FIN_WAIT1 15FIN_W ...
- 什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?
什么是作用域链,什么是原型链. 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==>函数1作用域==>函数2作用域 作用域的特点就 ...
- overflow:hidden的另一层含义
overflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是 很了解.一提到清除浮动,我们就会想到另外一个CSS样式 ...
- jqmobile小技巧
jqmobile API好像是不全,很多查不到.记录下自己的发现: 1.popup:data-position-to能够指向class或者id:data-position-to="#id|| ...
- Mongodb For Windows
关于 mongodb管理与安全认证 请移步这里: Mongodb For Mac OSX && 登录验证 安装mongodb 1. 官网下载 mongodb,如果嫌慢还可以前往百度云盘 ...
- Android 学习笔记之使用多线程实现断点下载...
PS:莫名其妙的迷茫... 学习内容: 1.使用多线程实现文件下载... 多线程下载是加快下载速度的一种方式..通过开启多个线程去执行一个任务..可以使任务的执行速度变快..多线程的任务下载时常都 ...
- 汇编学习:float与double速度问题
X86处理器包含两种类型的浮点数寄存器.第一种使用8个浮点寄存器组成浮点寄存器栈,另一种为向量寄存器(XMM,YMM),它们对于单双精度的处理是不同的.本文将讨论两种模式下的浮点数计算速度问题. 一. ...
- 虚拟机service network restart没有反应解决方法
一般我们新copy的虚拟机或新克隆的虚拟机第一次启动时都会出现没有ip地址的情况: [root@zejin243 network-scripts]# ifconfig lo Link ...
- Spring基础——小的知识点
一.整合多个配置文件 在 Spring Config 文件中,可以使用 <import> 标签将别的配置文件引入到一个文件中,进行配置文件的集成.该标签和 <bean> 标签同 ...
- myeclipse怎么github
myeclipse怎么github 第一步.打开myeclipse->选择项目->鼠标右键->Team->Share project,将出现如下图所示: 第二步.选择git,在 ...