Spring IOC之参数
1.Bean
1.配置项
1.id 2.class 3.scope 4.constructor arguments 5.properties
6.autowiring mode 7.lazy-initalization mode 8.initalization/destruction method
2.作用域
1.singleton(默认)
单例,指一个Bean容器中只存在一份
简而言之:
以单例模式创建的bean对象,在beans容器(IOC容器可以加载多个beans容器的配置文件)中的对象都是同一个内存地址对象
2.prototype
原型,每次请求(每次使用)创建新的实例,destroy方式失效(因为没有用到的实例会被垃圾回收,不需要调用destroy())
懒加载失效
简而言之:
同上,不过不同的地方在于,prototype原型是new不同的对象内存地址(结合Object类的hashcode()方法来判断内存地址)
3.request
请求,每次http请求创建一个实例且仅在当前request内有效
4.session
会话,每次http请求创建,当前session内有效(同request)
5.global session
基于portlet的web中有效(portlet定义了global session),如果是在web中,同session
3.生命周期
1.定义
在xml配置文件定义
2、初始化
1.三种方式
1.在xml配置文件中,定义bean的时候,配置init-method
这个方法属于class的初始化的方法
当ioc容器加载xml配置文件并初始化bean的时候,就会根据init-method指令调用该bean类里面的相应方法进行初始化
2.实现org.springframework.beans.factory.initialBean的接口并复写afterPropertiesSet()方法;
当ioc容器加载bean的时候,判断该类是否实现了initializingBean这个接口,(前提:该类先bean注入进bean容器)
如果实现了该接口,就会自动调用afterPropertiesSet()方法,然后这个方法里面就会执行初始化的操作
3.如下
3.使用
1.获取bean生成实例,然后调用里面的成员
4、销毁
1.三种方式
1.在xml配置文件中,定义bean的时候,配置destroy-method
这个方法属于class的初始化的方法
当ioc容器加载xml配置文件并初始化bean的时候,就会根据destroy-method指令调用该bean类里面的相应方法
2.实现org.springframework.beans.factory.DispsableBean的接口并复写destroy()方法;
当ioc容器加载bean的时候,判断该类是否实现了DispsableBean这个接口,(前提:该类先bean注入进bean容器)
如果实现了该接口,就会自动调用destroy()方法,然后这个方法里面就会执行销毁的操作
3.如下
全局的初始化和销毁方法:
当三种方法一起使用的时候,全局默认的就会失效,而实现接口的会优先于手动配置的
2.Aware
1.Spring中提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化之后,可以获取相应资源
2.通过Aware接口,可以对Spring相应资源进行操作(一定要慎重)
3.为对Spring进行简单的扩展提供了方便的入口
简而言之:
就是用来获取IOC容器/bean容器里的bean资源
4.两种接口
前提:
都需要先在xml配置文件配置该类的bean
1.applicationContextAware
实现了该接口的类,会获取到IOC容器的全局上下文applicationContext
然后,applicationContext.getBean(“id_name”)拿到bean对象。。。。。。多种方式
2.BeanNameAware
实现了该接口的类,会获取到bean容器的BeanName
主要用来获取该类注入在bean容器里面的id_name的名字,再用该名字来生成该bean对象
3.Autowiring
(自动装配,相当于设值注入、构造注入的结合体;其也是一种注入方式,为属性赋值)
(前提:把该类注入bean容器中)
1.常用参数
1.no(默认):不做任何操作
2.byName:根据属性名自动装配
在IOC容器中,找到与该属性名相同的bean的id名字(id相关),通过JavaBean的setName()给属性赋值;(类似设值注入)
3.byType:1.如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配
2.如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配
3.如果没有找到相匹配的bean,则什么事都不会发生
在IOC容器中,找到与该属性名相同的bean的class(类路径相关),通过JavaBean的setName()给属性赋值;(类似设值注入)
4.Constructor:与byType方式类似(与bean的id名无关,与bean的class相关),不同之处在于它应用于构造器参数
如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常
2.全局配置:
4.Resources
(针对资源文件的统一接口)
1.作用:
可以用Resources可以完成Spring资源文件的加载
2.分类
1.UrlResources:URL对应的资源,根据一个URL地址即可构建
2.ClassPathResources:获取类路径下的资源文件
3.FileSystemResources:获取文件系统里面的资源
4.ServletContextResources:ServletContext封装的资源,用于访问ServletContext环境下的资源
5.InputStreamResources:针对于输入流封装的资源
6.ByteArrayResources:针对于字节数组封装的资源
3.ResourceLoader
1.作用
对Resources加载的接口,所有的applicationContext(IOC容器全局上下文)都实现这个接口
简而言之:
applicationContext拥有了Resources的接口,有了applicationContext,就相当于有了applicationContext
(前提:先可以通过Aware获取applicationContext;再用applicationContext操作Reasouces)
2.前缀
1.classpath:(相对路径)
2.file:(绝对路径)
3.http:(网络方式)
4.no(依赖applicationContext的路径,applicationContext也是一种classpath的方式)
3.例子
applicationContext.getResource(“前缀”)
还没有评论,来说两句吧...