<bean lazy-init=“true” > </bean>
懒加载默认是false,Spring容器启动的时候实例化,true是启动的时候不会被实例化,使用的时候实例化,
优点:1.减少对象实例化出现的问题(配置文件的加载和解析)有问题,提前发现和解决
2.先实例化,提高程序的性能,提高用户体验
IOC控制的是bean对象
什么类型的对象适合作为单例对象来使用
一般是对于无状态或状态不可改变的对象适合使用单例模式
定义在方法里的局部变量,每个线程都有这个变量,成员变量问题会导致出现多线程安全问题,
比如user成员变量 有状态的bean对象
userDao是一个无状态的,所以是安全的,具体看变化的成员变量,
无状态的bean适合做单例对象,因为线程是安全的
默认是单例模式,但是修改<bean scope="prototype"</bean> 每次获取对象都会重新创建这个对象,IOC不会维护,在缓存池中也找不到
web的作用域:
request:每一次请求都会创建一个bean对象,比如表单,每一次提交表单的数据创建一个bean保持这些表单数据,请求结束释放这些数据
session:每一次会话创建一个bean
globalsession:类似session作用域,用于protlet(protlet是基于java的web组件,由Portlet容器管理,并由容器处理请求,生产动态内容)环境的web应用,如果是非portlet环境则视为session作用域
在Spring框架中Bean有定义,初始化,使用和销毁四个阶段
Spring Bean的初始化
1.xml配置文件中init-method属性来完成
2.实现 org.springframework.beans.factory.InitializingBean 接口
bean对象在实例化的过程是在spring容器初始化时被实例化
<bean id="userServiceImpl"class="com.shsxt.service.impl.UserServiceImpl" init-method="init"
Bean的使用:
1.使用BeanFactory
2.使用ApplicationContext
Bean的销毁:
实现销毁方式:(Spring容器会维护bean对象的管理,可以指定bean对象销毁所执行的方法)
<bean id="userServiceImpl"class="com.shsxt.service.impl.UserServiceImpl" initmethod="init" destroy-method="destroy"> </bean>
通过AbstractApplicationContext 对象,调用其 close方法实现bean的销毁过程。
AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("springapplication.xml"); ctx.close();