Spring Bean

Bean 生命周期

  1. 实例化,new
  2. 对Bean进行配置 -- IOC注入
  3. 如果实现BeanNameAware接口,调用setBeanName()
  4. 如果实现BeanFactoryAware接口,调用setBeanFactory()
  5. 如果实现ApplicationContextAware接口,调用setApplicationContext()
  6. 如果实现BeanPostProcessor中postProcessorBeforeInitialization()
  7. 调用配置的初始化方法
  8. 调用BeanPostProcessor中postProcessorAfterInitialization()
  9. 使用
  10. 销毁destroy()

Bean实例化过程中修改成员变量,怎么做?

spring容器初始化时,从资源中读取到bean的相关定义后,保存在beanFactory的成员变量中(参考DefaultListableBeanFactory类的成员变量beanDefinitionMap),在实例化bean的操作就是依据这些bean的定义来做的,而在实例化之前,spring允许我们通过自定义扩展来改变bean的定义,定义一旦变了,后面的实例也就变了,而beanFactory后置处理器,即BeanFactoryPostProcessor就是用来改变bean定义的;

postProcessBeforeInitialization:该方法主要针对spring在bean初始化时调用初始化方法前进行自定义处理。postProcessAfterInitialization:该方法主要针对spring在bean初始化时调用初始化方法后进行自定义处理。BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术

Bean实例化

xml配置实现三种方法:普通构造方法,静态工厂,实例工厂

  • 普通构造方法
<bean class="org.sang.User" id="user"/>
  • 静态工厂 static方法
<bean id="user2" class="org.sang.User2Factory" `factory-method`="getInstance"/>
  public static User2 getInstance() {
        return new User2();
    }
}
  • 实例工厂 非static方法
<bean class="org.sang.User3Factory" id="user3Factory"/>
    <bean id="user3" factory-bean="user3Factory" factory-method="getUser3"/>
public class User3Factory {
    public User3 getUser3() {
        return new User3();
    }
}

Bean元素作用域

  • Singleton 单例
  • Prototype 多例 每次getBean,新bean实例
  • Request 每次http请求,使用request定义的bean,新实例
  • Session 每次http session
  • Globalsession
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容