一、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.
分享到:
相关推荐
通过模拟`BeanFactory`,我们可以加深对Spring如何管理对象生命周期和依赖关系的理解。这对于日常开发和优化Spring应用非常有帮助,尤其是在解决依赖问题或自定义bean处理逻辑时。同时,了解这些基础知识也为理解和...
- **非侵入式**:使用Spring Framework开发应用程序时,Spring对应用程序本身的结构影响非常小,可以做到对领域模型的零污染,同时通过简单的注解就能实现对功能性组件的管理,使得应用程序结构更加清晰、简洁。...
3. **数据访问抽象层**:Spring提供了对各种持久化技术的支持,如JDBC、Hibernate等,并提供了一套统一的数据访问异常层次结构。 4. **事务管理**:Spring提供了声明式事务管理功能,使得事务管理变得更加简单易用。...
- **Bean容器**:Spring通过BeanFactory和ApplicationContext管理应用中的对象,它们负责创建、初始化、配置以及管理Bean。 - **AOP**:Spring的面向切面编程允许开发者定义“切面”,实现代码的模块化,如日志、...
BeanFactory提供了对Bean的创建、初始化、销毁等操作的支持,是Spring容器的基础。当我们通过XML、Java配置或者注解定义Bean时,Spring会将这些配置解析成BeanDefinition对象,BeanDefinition包含了Bean的所有元数据...
《Spring源码分析——BeanFactory》 ...理解并熟练运用BeanFactory及其相关概念,对于深入学习Spring框架至关重要。通过不断实践和研究源码,我们可以更深入地理解Spring的工作原理,从而更好地利用这个强大的工具。
在Spring框架中,ApplicationContext和BeanFactory是两种不同的bean容器,它们各自有其特性和应用场景,理解二者的区别对于深入学习和使用Spring至关重要。 首先,BeanFactory是Spring中最基础的bean管理容器,它...
Spring的BeanFactory和ApplicationContext接口,以及其实现类,都是工厂模式的体现。它们负责创建和管理Bean,提供了根据名称或类型获取Bean实例的能力。 5. **单例模式(Singleton Pattern)**: Spring默认将Bean...
BeanFactory 是 Spring 框架中的一个核心接口,用于管理应用程序中的对象(也称为 bean)。它提供了一种将应用程序组件(如服务、数据源、控制器等)解耦并配置到应用程序中的方式。 总的来说,可以初步理解...
简单了解Spring中BeanFactory与FactoryBean的区别 Spring框架中有两个非常关键的接口:BeanFactory和FactoryBean。虽然它们的名字相似,但它们的作用和实现机制却有很大的不同。 BeanFactory是Spring IoC容器的...
- 核心容器(Core Container):包括Spring的核心模块,它为其他模块建立试基础,如BeanFactory,它是一种工厂模式的实现,用于管理Java对象的创建和配置。 - Spring表达式语言(SPEL,Spring Expression Language)...
2. **WebSocket支持**:Spring 4引入了对WebSocket协议的支持,通过`@WebSocketMessageBroker`和`@MessageMapping`等注解,可以方便地构建实时双向通信的应用。 3. **反应式编程**:Spring 4.x开始引入对反应式编程...
4. **资源访问**:Spring简化了资源的访问,如对JDBC操作的简化,提供了JdbcTemplate等工具。 5. **事务管理**:Spring框架集成了不同类型的事务管理,支持声明式事务管理,大大简化了事务的配置和管理。 ### ...
Spring的BeanFactory的接口的中文解释
通过深入学习,我们可以提升对Spring的理解,从而优化我们的Java企业级应用。 1. **Spring框架概述**: - Spring是Java平台上的一个开源框架,用于简化企业级应用的开发。 - 它的核心特性包括依赖注入...
### Spring的BeanFactory的接口注解 #### 一、引言 在Spring框架中,`BeanFactory`是工厂模式的一种实现,它负责管理容器中的Bean的生命周期与依赖注入。了解`BeanFactory`及其相关接口的功能对于掌握Spring的核心...
这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...
6. **数据访问集成**:Spring2.0提供了对各种持久化技术的支持,包括JDBC、ORM框架(如Hibernate、JPA)和O/R映射。它提供了模板类简化数据库操作,如JdbcTemplate和HibernateTemplate。 7. **MVC框架**:Spring ...
3. **数据访问集成**:Spring提供了对各种持久化技术的支持,包括JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis,以及JPA(Java Persistence API)。 4. **Web框架**:Spring MVC是Spring提供的...
Spring源码学习概述 Spring是Java生态系统中的一种流行的开源框架,由Rod Johnson创立于2003年。Spring框架的主要目标是使Java应用程序的开发变得更加简洁、灵活和可维护。Spring框架的核心思想是基于依赖注入...