#spring——bean的配置及作用域#
1.bean的常用配置项:(理论上只有class是必须的)
id:唯一标识
class:具体是哪一个类
scope:范围
constructor arguments:构造器的参数
properties:属性
Autowiring mode:自动装配模式
lazy-initialization mode:懒加载模式
initialization/destruction method:初始化/销毁的方法
2.bean的作用域
singletion 单例 bean容器只有唯一的对象(默认模式)------对于一个IOC容器,只创建一个实例
prototype 每次请求会创建新的实例,destory方式不生效------对于不同的请求,创建不同的实例
request 对于request创建新的实例,只在当前request内有效-----对于一个request,创建一个实例
session 对于session创建新的实例,只在当前session内有效------对于一个session,创建一个实例
global session 基于portlet(例如单点登录的范围)的web中有效,如果在web中同session------对于一个全局的session,创建一个实例(不同系统之间的切换)
#spring——bean的生命周期#
生命周期:定义,初始化,使用,销毁
一.初始化:
方法1.实现org.springframework.beans.foctory.InitializingBean接口,覆盖afterPropertiesSet方法。系统会自动查找afterPropertiesSet方法,执行其中的初始化操作
方法2.配置init-method
例如设置bean中init-method="init"那么在初始化过程中就会调用相应class指定类的init()方法进行初始化工作
二 销毁(与初始化类似)
方法1.实现org.springframework.beans.foctory.DisposableBean接口,覆盖destory方法。
方法2.配置destory-method
三 配置全局初始化、销毁方法(属于默认配置,参考截图)
注意:
当三种方式同时使用时,全局(默认的)初始化销毁方法会被覆盖。
另外实现接口的初始化/销毁方式会先于配置文件中的初始化/销毁方式执行。
若仅有全局初始化即使没有以上三种初始化方法也是可以编译执行的,但是有另两种初始化销毁方法时,必须存在相应的方法,否者编译报错
#spring——Aware接口#
作用:实现了Aware接口的bean在初始化后可以获取相应资源并进行相应的操作(对于操作的结果要慎重!)
举例:
ApplicationContextAware:向实现了该接口的bean提供IOC容器的上下文信息(ApplicationContext),实现了该接口的bean必须配置到配置文件中并由spring的bean容器加载
BeanNameAware:向实现了该接口的bean提供关于beanName定义的相关内容
1.ApplicationContextAware
1.1 接口方法:setApplicationContext
1.2 作用:通常用来获取上下文对象,声明全局变量后在方法中对变量进行初始化并供其他方法调用
1.3 实现过程:创建一个类并实现ApplicationContextAware接口,重写接口方法public void setApplicationContext(ApplicationContext applicationContext);在xml文件中配置该类;当spring加载该配置文件时即调用接口方法
2.BeanNameAware
2.1 接口方法:setBeanName
2.2 作用:获取声明的类名,声明全局变量后在方法中对变量进行初始化并供其他方法调用
2.3 实现过程:创建一个类并实现BeanNameAware接口,重写接口方法public void setBeanName(String name);在xml文件中配置该类;当spring加载该配置文件时即调用接口方法
Bean的自动装配(Autowiring)
1.No:不做任何操作
2.byname:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配
3.byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型的bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生
4.Constructor:与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常
Bean的自动装配:在beans标签配置属性 default-autowire="no/byName/byType/constructor"
作用为:省去了在Spring的xml中配置property标签和constructor-arg标签,只需要配置bean标签即可
PS:byName和byType为设值注入,constructor为构造注入;
byName要求bean标签的id属性需要和成员变量的名称一致,
byType和constructor则跟id无关
Resources (针对于资源文件的统一接口)
A、UrlResource:URL 对应的资源,根据一个 URL 地址即可获取
B、ClassPathResource:获取类路径下的资源
C、FileSystemResource:获取文件系统里面的资源
D、ServletContextResource:ServletContext 封装的资源,用于访问 ServletContext 环境下的资源
E、InputStreamResource:获取输入流封装的资源
F、ByteArrayResource:获取字节数组封装的资源
通过实现 ApplicationContextAware 接口中的方法
setApplicationContext(ApplicationContext applicationContext)
Resource resource = applicationContext.getResource("xxx");
classpath:config.txt
file:C:\\config.txt
ftp:C:\\config.txt
http://www.baidu.com/more/