美文网首页
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