- 浏览: 26717 次
- 性别:
- 来自: 杭州
最新评论
1.配置文件中每一个<bean>解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中
2.容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂后处理器(实现BeanFactoryPostProcessor接口)的Bean,然后调用这些Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理(BeanDefinitionRegistryPostProcessor接口)
实现BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor接口会比正常的Bean早实例化,执行init-method。
3.Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,实例化Bean(所以必须有无参的构造方法),完成Bean属性的设置工作;
涉及Bean的实例化:
AbstractApplicationContext.refresh() 刷新容器
AbstractApplicationContext.finishBeanFactoryInitialization 完成初始化
DefaultListableBeanFactory.preInstantiateSingletons()单例对象(第一次实例化Bean)
AbstractBeanFactory . doGetBean():先去查,查不到就做实例化,先查找当前bean的依赖,同样使用 doGetBean()去找(递归处理bean的依赖)
RequiredAnnotationBeanPostProcessor 对应到@Required
AutowiredAnnotationBeanPostProcessor 对应到@ Autowired
CommonAnnotationBeanPostProcessor 对应到 @Resource
4.利用容器中注册的Bean后处理器(实现BeanPostProcessor接口的Bean)对已经完成属性设置工作的Bean进行后续加工,直接装配出一个准备就绪的Bean。
2.容器扫描BeanDefinitionRegistry中的BeanDefinition,使用Java的反射机制自动识别出Bean工厂后处理器(实现BeanFactoryPostProcessor接口)的Bean,然后调用这些Bean工厂后处理器对BeanDefinitionRegistry中的BeanDefinition进行加工处理(BeanDefinitionRegistryPostProcessor接口)
实现BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor接口会比正常的Bean早实例化,执行init-method。
3.Spring容器从BeanDefinitionRegistry中取出加工后的BeanDefinition,实例化Bean(所以必须有无参的构造方法),完成Bean属性的设置工作;
涉及Bean的实例化:
AbstractApplicationContext.refresh() 刷新容器
AbstractApplicationContext.finishBeanFactoryInitialization 完成初始化
DefaultListableBeanFactory.preInstantiateSingletons()单例对象(第一次实例化Bean)
AbstractBeanFactory . doGetBean():先去查,查不到就做实例化,先查找当前bean的依赖,同样使用 doGetBean()去找(递归处理bean的依赖)
RequiredAnnotationBeanPostProcessor 对应到@Required
AutowiredAnnotationBeanPostProcessor 对应到@ Autowired
CommonAnnotationBeanPostProcessor 对应到 @Resource
4.利用容器中注册的Bean后处理器(实现BeanPostProcessor接口的Bean)对已经完成属性设置工作的Bean进行后续加工,直接装配出一个准备就绪的Bean。
发表评论
-
java 基本类型存储解析
2012-07-11 12:53 994byte b=-128; byte b=127; 都是可以编 ... -
nio
2012-01-31 16:57 809原来的I/O包和NIO处理数据最大的不同之处在于数据打 ... -
null
2012-01-30 17:34 558null可以转换成任何类的对象 -
java 线程的几个方法
2012-01-17 15:39 997Thread的方法 sleep() 1. sleep ()函 ... -
java 线程
2012-01-17 14:37 736现在的系统的都是分时系统,达到多进程的效果。cpu只是将时间 ... -
java 访问修饰符
2012-01-12 10:34 727对于类成员(字段和方法)的访问权限来说, public:所有类 ... -
设计模式初学
2012-01-10 17:39 687代理模式只是原来对象的一个替身(原来对象约束了代理的行为) ... -
jndi学习
2012-05-26 19:10 721jndi--命名和目录服务api 用于查找远程的资源,例如 ... -
java 泛型学习--类型擦除
2011-12-26 17:58 1727类型擦除(type erasure)。 Java中的泛型基本上 ... -
java 泛型学习--泛型方法
2011-12-26 17:30 946通过在类的定义中添加 ... -
java 泛型学习--类型通配符
2011-12-26 17:17 890假设您具有该方法: void printList(Lis ... -
java 泛型学习
2011-12-26 16:42 769除了异常类型、枚举或匿名内部类以外,任何类都可以具有类型参数。 ... -
servlet path学习
2011-12-22 15:40 945servlet path就是取从context path后开始 ... -
log4j 学习
2011-12-16 11:01 947Log4j除了可以记录程序 ... -
java 可变长参数
2011-12-15 15:15 336[size=x-large] java 的可变长参数 例如: ... -
java垃圾回收
2011-12-12 19:16 637Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现 ... -
velocity性能优化
2011-12-09 11:16 9441.char to byte 字符转变字节,流用字节去输出 ... -
velocity 宏
2011-12-12 19:16 11231.方法当作参数化 当使用引用作为参数传递给Velocity ... -
ThreadLocal
2011-11-10 14:48 684每个线程有一个ThreadLocalMap对象,这是一个Map ... -
struts2 Codebehind Plugin
2011-11-08 15:32 3281.为未定义的action指定mapping When no ...
相关推荐
9. **Bean初始化**: 最后,`initializeBean(beanName, exposedObject, mbd)`对创建好的Bean进行初始化,包括调用初始化方法(如果有`@PostConstruct`注解的方法),以及执行AOP代理等操作。 整个流程中,Spring...
下面将详细介绍如何通过不同方式定义Spring Bean的初始化和销毁回调方法。 **初始化回调方法** 1. **@PostConstruct注解** 这个Java标准注解用于标记一个方法,该方法将在对象完全构造后但在业务逻辑执行前被调用...
Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...
Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责加载和管理 Bean。 SpringApplication...
Spring Bean的初始化和销毁实例详解 Spring Bean的初始化和销毁是Spring框架中一个非常重要的概念,它们都是Bean生命周期中不可或缺的一部分。在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下...
Spring Bean 初始化及销毁多种实现方式 Spring Bean 初始化及销毁是 Spring 框架中非常重要的知识点。Spring 提供了多种不同的方式来初始化和销毁 Bean,这些方式包括 init-method/destroy-method、...
3. **@PostConstruct与初始化回调**:Spring允许我们在Bean初始化后执行特定代码,通常通过`@PostConstruct`注解的方法来实现。如果这个方法被意外地调用了两次,那么Bean也会被构造两次。检查是否有多处调用或配置...
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...
但是,这并不总是可靠的,因为Spring通常会延迟初始化Bean,除非显式要求或存在依赖关系。 2. **依赖注入**:Spring容器会根据Bean之间的依赖关系来决定实例化顺序。如果一个Bean依赖于另一个Bean,那么被依赖的...
在Spring框架中,Bean的初始化是一个关键的概念,它涉及到Bean的生命周期管理以及Spring容器如何创建、配置和管理这些Bean。本文将深入探讨Spring容器中Bean的初始化过程。 首先,Spring容器根据XML配置文件(如`...
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
在本篇文章中,我们将深入探讨Spring源码中关于Bean初始化的过程,特别是`finishBeanFactoryInitialization()`方法和`preInstantiateSingletons()`方法。 首先,`finishBeanFactoryInitialization(Confi...
通过实现`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,可以在Bean初始化前后进行额外的操作。 在Spring容器中,Bean的生命周期管理也支持通过`BeanDefinition`进行定制。例如,...
7. **Bean初始化**: 实例化完成后,Spring会执行Bean的初始化方法,包括调用`@PostConstruct`注解的方法。同时,如果Bean实现了InitializingBean接口,其`afterPropertiesSet()`方法也会被调用。 8. **初始化后...
此外,Spring提供了BeanPostProcessor接口,允许我们在Bean初始化前后进行自定义处理。通过实现`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,可以在Bean实例化和初始化之后进行...
Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由Spring容器控制。实例化Spring Bean的方式多种多样,包括XML配置、注解配置以及Java配置等。而工厂方法是其中一种自定义实例...
3. 加载 bean:Spring 会加载 bean,并将其实例化。 4. 获取 bean:应用程序可以从容器中获取 bean 并使用它。 在加载 bean 的过程中,Spring 会使用 Resource 对象来表示 XML 文件,然后使用 ...
初始化后可访问Spring管理的Bean