`
Bluesnails
  • 浏览: 24518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

zz:对Spring的BeanFactory的学习小结

    博客分类:
  • SSH
阅读更多
一、Spring装配Bean的过程
1. 实例化;
2. 设置属性值;
3. 如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name;
4. 如果实现BeanFactoryAware接口,调用setBeanFactory 设置BeanFactory;
5. 如果实现ApplicationContextAware,调用setApplicationContext设置ApplicationContext
6. 调用BeanPostProcessor的预先初始化方法;
7. 调用InitializingBean的afterPropertiesSet()方法;
8. 调用定制init-method方法;
9. 调用BeanPostProcessor的后初始化方法;


Spring容器关闭过程
1. 调用DisposableBean的destroy();
2. 调用定制的destroy-method方法;

总结:
在Bean初始化的过程中最多有三次修改Bean的机会,实现InitializingBean或者定制init-method是一次机会,区别是一个与SpringFrameWork紧密偶合;实现BeanPostProcessor为Bean的修改提供了两次机会.
如果需要调用BeanFactor的一些特性,如发布事件等需要对BeanFactor或者ApplicationContext进行引用需实现BeanFactoryAware或者ApplicationContextAware.当然如果想得到自己的ID或者名字则实现BeanNameAware.
ApplicationContextAwareProcessor 是BeanPostProcessor的一个实现,将ApplicationContext传递给所有的实现ApplicationContextAware的Bean.


二、依赖注入
1、set依赖注入
<property><ref bean="beanName"></property>   
<property><ref local="beanName"></property>   
<property><bean class="beanClass"/></property>   
<property>   
    <list>   
        <value>bar</value>   
        <ref bean="foo"/>   
    </list>   
</property>   
<property>   
    <set>   
        <value>bar</value>   
        <ref bean="foo"/>   
    </set>   
</property>   
<property>   
    <map>   
        <entry key="key1"><!--主键只能是String-->   
            <value>bar</value>   
        </entry>   
        <entry key="key2">   
            <ref bean="foo"/>   
        </entry>   
    </map>   
</property>   
<property>   
    <prop>   
        <prop key="key1">foo</value>   
        <prop key="key2">bar</value>   
    </prop>   
</property>       
<property></null></property>  


2、constructor注入
 
<constructor-arg>   
   <value>42</value>   
</constructor-arg>   
<constructor-arg>   
   <bean ref="foo"/>   
</constructor-arg>   
<constructor-arg index="0">   
   <bean ref="foo"/>   
</constructor-arg>   
<constructor-arg type="java.net.URL">   
   <value>http://abc.com</value>   
</constructor-arg>  



三、自动装配
<bean id="foo" class="beanClass" autowire="autowire type"/>
有四种自动装配类型,byName,byType,constructor,autodetect,前两个是针对Set的自动装配,autodetect是由容器选择,在装配不成功(有重复情况)容器会抛异常而不是最先匹配原则。
<beans default-autowire="byName"/>缺省无自动装配,可设置缺省装配属性。
自动装配和非自动装配可混合使用。

四、BeanFactorPostProcessor
在BeanFactory载入所有Bean后,实例化Bean前,对BeanFactor做一些后处理工作,PropertyPlaceholderConfiger和CustomEditorConfigurer是SpringFrameWork自定义的BeanFactoryPostProcessor.
PropertyPlaceholderConfiger
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfiger">   
   <property name="location">jdbc.properties</property>   
</bean>   
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfiger">   
   <property name="locations">   
      <list>   
         <value>jdbc.properties</value>   
         <value>security.properties</value>   
      </list>   
</bean>   
<bean id="" class="">   
    <property>   
      <value>${database.url}</value>   
    </property>   
</bean>  


CustomerEditorConfigurer
继承java.beans.PropertyEditorSupport实现自己的TypeEditor,实现其中的setAsText方法,代码
public class PhoneEditor extends java.beans.   
PropertyEditorSupport{   
    public void setAsText(String textvalue)   
    {   
        ......   
        PhoneNumber phone = new PhoneNumber();   
        setValue(phone);   
    }   
}  



注册到SpringFrameWork
<bean id="customerEditorConfigurer" class="org.springframework.beans.factory.config.CustomerEditorConfiger">   
  <property name="customEditors">   
     <map>   
       <entry key="com.Phone"><!---->   
          <bean id="phoneEditor" class="PhoneEditor"/>   
       </entry>     
     </map>   
  </property>   
</bean>  

五、Event
系统事件ContextClosedEvent,ContextRefreshedEvent(初始化或者刷新时),RequestHandlerEvent Web请求被处理后。

接收事件的Bean 需实现ApplicationListener.

继承ApplicationEvent实现自己的Event,后由Bean调用context.publishEvent()发布事件,当然前提是你的Bean 要通过实现ApplicatonContextAware获得ApplicationContext.



分享到:
评论

相关推荐

    简单模拟Spring的beanFactory

    通过模拟`BeanFactory`,我们可以加深对Spring如何管理对象生命周期和依赖关系的理解。这对于日常开发和优化Spring应用非常有帮助,尤其是在解决依赖问题或自定义bean处理逻辑时。同时,了解这些基础知识也为理解和...

    学习笔记:尚硅谷Spring6基础篇

    - **非侵入式**:使用Spring Framework开发应用程序时,Spring对应用程序本身的结构影响非常小,可以做到对领域模型的零污染,同时通过简单的注解就能实现对功能性组件的管理,使得应用程序结构更加清晰、简洁。...

    Spring技术内幕:深入解析Spring架构与设计原理(第2版) .pdf

    3. **数据访问抽象层**:Spring提供了对各种持久化技术的支持,如JDBC、Hibernate等,并提供了一套统一的数据访问异常层次结构。 4. **事务管理**:Spring提供了声明式事务管理功能,使得事务管理变得更加简单易用。...

    spring学习资料大全

    - **Bean容器**:Spring通过BeanFactory和ApplicationContext管理应用中的对象,它们负责创建、初始化、配置以及管理Bean。 - **AOP**:Spring的面向切面编程允许开发者定义“切面”,实现代码的模块化,如日志、...

    Spring源码学习三:BeanFactory解析1

    BeanFactory提供了对Bean的创建、初始化、销毁等操作的支持,是Spring容器的基础。当我们通过XML、Java配置或者注解定义Bean时,Spring会将这些配置解析成BeanDefinition对象,BeanDefinition包含了Bean的所有元数据...

    二、Spring源码分析——BeanFactory

    《Spring源码分析——BeanFactory》 ...理解并熟练运用BeanFactory及其相关概念,对于深入学习Spring框架至关重要。通过不断实践和研究源码,我们可以更深入地理解Spring的工作原理,从而更好地利用这个强大的工具。

    Spring中ApplicationContext和beanfactory区别.rar

    在Spring框架中,ApplicationContext和BeanFactory是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入学习和使用Spring至关重要。 首先,BeanFactory是Spring中最基础的bean管理容器,它...

    86丨开源实战四(下):总结Spring框架用到的11种设计模式1

    Spring的BeanFactory和ApplicationContext接口,以及其实现类,都是工厂模式的体现。它们负责创建和管理Bean,提供了根据名称或类型获取Bean实例的能力。 5. **单例模式(Singleton Pattern)**: Spring默认将Bean...

    BeanFactory内部解析:Spring框架的心脏如何运作

    BeanFactory 是 Spring 框架中的一个核心接口,用于管理应用程序中的对象(也称为 bean)。它提供了一种将应用程序组件(如服务、数据源、控制器等)解耦并配置到应用程序中的方式。 总的来说,可以初步理解...

    简单了解Spring中BeanFactory与FactoryBean的区别

    简单了解Spring中BeanFactory与FactoryBean的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...

    Java EE 框架整合 开发入门到实战-Spring+Spring MVC+MyBatis微课版复习笔记

    - 核心容器(Core Container):包括Spring的核心模块,它为其他模块建立试基础,如BeanFactory,它是一种工厂模式的实现,用于管理Java对象的创建和配置。 - Spring表达式语言(SPEL,Spring Expression Language)...

    SpringiA4_SourceCode:Spring实战第四版源码,学习用。

    2. **WebSocket支持**:Spring 4引入了对WebSocket协议的支持,通过`@WebSocketMessageBroker`和`@MessageMapping`等注解,可以方便地构建实时双向通信的应用。 3. **反应式编程**:Spring 4.x开始引入对反应式编程...

    spring 学习

    4. **资源访问**:Spring简化了资源的访问,如对JDBC操作的简化,提供了JdbcTemplate等工具。 5. **事务管理**:Spring框架集成了不同类型的事务管理,支持声明式事务管理,大大简化了事务的配置和管理。 ### ...

    Spring的BeanFactory的接口源码中文解释

    Spring的BeanFactory的接口的中文解释

    Spring技术内幕:深入解析Spring架构与设计原理

    通过深入学习,我们可以提升对Spring的理解,从而优化我们的Java企业级应用。 1. **Spring框架概述**: - Spring是Java平台上的一个开源框架,用于简化企业级应用的开发。 - 它的核心特性包括依赖注入...

    Spring的BeanFactory的接口注解

    ### Spring的BeanFactory的接口注解 #### 一、引言 在Spring框架中,`BeanFactory`是工厂模式的一种实现,它负责管理容器中的Bean的生命周期与依赖注入。了解`BeanFactory`及其相关接口的功能对于掌握Spring的核心...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring2.0学习手册

    6. **数据访问集成**:Spring2.0提供了对各种持久化技术的支持,包括JDBC、ORM框架(如Hibernate、JPA)和O/R映射。它提供了模板类简化数据库操作,如JdbcTemplate和HibernateTemplate。 7. **MVC框架**:Spring ...

    spring源码+spring所需jar包

    3. **数据访问集成**:Spring提供了对各种持久化技术的支持,包括JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis,以及JPA(Java Persistence API)。 4. **Web框架**:Spring MVC是Spring提供的...

    Spring源码学习一:源码分析概述1

    Spring源码学习概述 Spring是Java生态系统中的一种流行的开源框架,由Rod Johnson创立于2003年。Spring框架的主要目标是使Java应用程序的开发变得更加简洁、灵活和可维护。Spring框架的核心思想是基于依赖注入...

Global site tag (gtag.js) - Google Analytics