<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();