以下内容是从书中摘录来的,但是我发现即使摘录一遍,对其内容的理解也会更加深入!
一、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 个人小结 源码分析机制原理"及描述,深入探讨Spring的核心机制、源码分析以及创建Bean的过程。 首先,Spring的BeanUtils组件在处理Bean时,有一个重要的区别:Apache的BeanUtils支持`...
Spring的核心在于其BeanFactory和ApplicationContext,它们使得对象的管理和装配变得简单。这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory*...
小结: 1. Spring通过工厂bean支持我们参与到bean对象的创建过程中。 2. 工厂bean最终返回的对象是由getObject方法来决定。 总结:今天,我们探讨了Spring中的BeanFactory和FactoryBean这两个概念,了解了它们在...
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结
1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 ...
目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.5小结 ...2.1.1beanfactory介绍 ...2.6小结 ...3.3注入非springbean ...3.5使用spring的特殊bean ...b.4小结
第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结
1.8 小结 第2章 快速入门 2.1 实例功能概述 2.1.1 比Hello World更适用的实例 2.1.2 实例功能简介 2.2 环境准备 2.2.1 创建库表 2.2.2 建立工程 2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 ...
小结 Spring框架提供了一个强大的IoC容器和依赖注入机制,允许开发者以声明的方式管理应用程序中的对象关系和依赖关系。同时,Spring框架还提供了一些Annotation和AOP机制,允许开发者以模块化的方式管理应用程序...
#### 小结 《Spring开发指南》不仅仅是一本关于Spring框架的技术书籍,更是夏昕对Spring框架深入理解的结晶。通过本书的学习,读者不仅可以了解Spring框架的基本原理和核心组件,还能学习到如何利用Spring来解决...
小结 本课程主要介绍了 Spring 框架中的工厂模式的实现,包括使用 BeanFactory 来管理 bean 的实例化和装配。通过学习本课程,学生将掌握使用 Spring 实现工厂模式的技术,了解工厂模式的优缺点,并能在实际项目中...
**2.15 小结** - **章节总结**:回顾控制反转容器的主要概念和技术要点。 #### 三、面向切面编程 **3.1 AOP与Spring AOP基础** - **AOP概述**:面向切面编程的基本原理。 - **Spring AOP基础概念**:Spring框架...
#### 七、小结 Spring 框架的 IoC 容器是其核心特性之一,通过 `BeanFactory` 和 `ApplicationContext` 接口实现了对 Bean 的管理与控制。`FileSystemXmlApplicationContext` 是一个常用的容器实现类,支持从文件...
五、小结 Spring的IoC容器,尤其是ApplicationContext,极大地简化了Java应用的开发和管理。它将对象的创建与管理抽象化,使得开发者能更专注于业务逻辑,而不是繁琐的依赖关系。了解并熟练掌握ApplicationContext...
### 小结 通过以上两种方法,我们可以在Spring应用中灵活地获取所需的Bean实例。第一种方法适用于Web应用环境,而第二种方法则更加通用,可以在任何环境中使用。这两种方式都避免了硬编码Bean的获取逻辑,使得代码...
六、 小结 Spring Bean 生命周期是 Spring 框架中的一个核心概念,掌握 Spring Bean 生命周期可以帮助我们更好地理解 Spring 框架的工作机制。通过本文,我们了解了 Spring Bean 生命周期的概念、生命周期图、生命...
#### 小结 《Spring开发指南》不仅是一本入门书籍,更是深入理解和掌握Spring框架的关键资源。通过对Spring框架核心概念的详细解读,如依赖注入的不同实现类型、Bean封装机制等,本书为开发者提供了坚实的基础,...
14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...
14.5.2. 小结 14.6. 文档视图(PDF/Excel) 14.6.1. 简介 14.6.2. 配置和安装 14.7. JasperReports 14.7.1. 依赖的资源 14.7.2. 配置 14.7.3. 构造ModelAndView 14.7.4. 使用子报表 14.7.5. 配置Exporter的...
本文将总结几种在代码中获取Spring Bean的方法,以供学习和工作中参考。 **1. 通过`ContextLoader.getCurrentWebApplicationContext()`获取** 这种方式适用于Web应用程序,不依赖于Servlet。在服务器启动后,...