美文网首页
Spring Bean

Spring Bean

作者: 响响月月 | 来源:发表于2019-04-19 17:03 被阅读0次

Bean 生命周期

  1. 实例化,new
  2. 对Bean进行配置 -- IOC注入
  3. 如果实现BeanNameAware接口,调用setBeanName()
  4. 如果实现BeanFactoryAware接口,调用setBeanFactory()
  5. 如果实现ApplicationContextAware接口,调用setApplicationContext()
  6. 如果实现BeanPostProcessorpostProcessorBeforeInitialization()
  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

相关文章

网友评论

      本文标题:Spring Bean

      本文链接:https://www.haomeiwen.com/subject/otmehqtx.html