在Spring 中,最关键的就是Bean ,spring通过IOC容器创建并管理Bean,一个普通的类是怎么样被Spring容器管理,并注册成为一个Bean呢,主要有如下几布
1、实例化Bean,并且对bean的属性的配置进行依赖注入 ,在这一步中,会对类进行实例化,也就是得到一个类的对象,这一步调用的是类的无参构造器,创建出来的对象通过setter方法,注入类属性值,也就是注解中的Autowired.
2、当得到类的实例对象后,spring就开始对这个对象进行一些代理操作来加强这个bean,假如bean实现了Aware接口,那么说明这个类允许其在bean容器中感知自己的属性,执行其实现的相对应的方法
3、继续进行bean的增强操作,如果bean与BeanPostProcessor 关联,调用postProcessBeforeInitialzation方法,在实例化后、初始化前添加自定义的逻辑,也就是AOP
5、调用bean自身的init方法,做一些初始化工作
如果在配置文件中通过 destory-method
对于Bean的销毁,那么怎么定义bean什么时候进行销毁呢,这里就涉及到bean的作用域,bean一共有5种作用域.
1:Singleton:在一个spring容器中只会存在唯一的bean实例,当容器关闭时bean被销毁
2:prototype:每次请求都会创建一个新的实例,也就是每次getInstance获得的是不同的bean,当容器关闭时才会被销毁
3:request:每一次HTTP请求都会产生一个新的bean,该bean只在当前HTTP Request有效,也就是服务器响应后则结束
4:Session:在一个HTTP Session中,一个bean定义对应一个实例,仅在基于web的Spring ApplicationContext 中有效,同一用户共享,保存在用户的session中
5: global-session:仅在基于porlet的应用中才有意义