`
eddie404956
  • 浏览: 6803 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

bean工厂后处理实现心得

阅读更多
当我想把配置文件include的功能加进步的时候,我打开了spring的参考手册,想大概看看spring是怎么做的。
但是我看到了spring中PropertyPlaceholderConfigurer的做法,对比了一下我的做法,发现我的很土啊,于是打算重写这个功能。
spring是用BeanFacoryPostProcessor来做的,就是在所有bean生成之前,要调一个回调方法。
问题是,这里实现了BeanFacoryPostProcessor接口的bean需要配置在配置文件中,像其他bean一样被创建,这样就遇到一个像
鸡先还是蛋先的问题。既然在所有bean生成之前,就要有这个BeanFacoryPostProcessor,但是BeanFacoryPostProcessor又是
一个bean。。。。。。。。。。
所以,我打算把BeanFacoryPostProcessor特殊化,也就是要从众多bean中找出BeanFacoryPostProcessor的定义。

本来我看了看spring的代码,以为要把BeanFacoryPostProcessor实例化才可以知道它是不是实现了这个接口,但是后来我发现
并不是这样的,只要有BeanFacoryPostProcessor的class就可以了。但是我的设计是读配置的时候只把String类型的className
保存,而没有保存class,看了看spring也是保存class的,看来我的设计有错误了,于是马上进行修改。

嗯,终于改好了。就是这个函数,在refresh()中加入
    private void handleModuleFactoryPostProcessor() throws ModulesException, FactortInitialException, ConstructorException {
        List<String> names=getPostProcessorNames(ModuleFactoryPostProcessor.class);
        for(String name:names){
            ModuleFactoryPostProcessor mfpp=(ModuleFactoryPostProcessor) getModule(name);
            singletons.put(name, mfpp);
            mfpp.postProcessModuleFactory(this);
            for(ConfigurableApplicationContext context:kids){
                mfpp.postProcessModuleFactory(context);
            }
           
        }
    }
我原来实现PropertyPlaceholderConfigurer这个功能,写得很烂,哈哈,现在爽多了。
分享到:
评论

相关推荐

    spring学习----工厂Bean

    总的来说,工厂Bean是Spring框架中的一个重要概念,它提供了对Bean创建过程的定制,使得我们可以处理那些需要特殊处理的对象。通过理解和熟练使用FactoryBean,可以极大地增强Spring应用程序的灵活性和可扩展性。

    spring 5.2.9 07 源码分析-spring的bean工厂准备工作 测试用例

    本章将详细分析Spring 5.2.9版本中Bean工厂的准备工作,特别是通过测试用例来理解其实现细节。 在Spring框架中,Bean工厂的初始化是一个关键过程,它涉及到许多内部机制的设置。首先,我们来看看`BeanFactory`接口...

    实例化Spring bean的两种工厂方法

    实例化Spring Bean的工厂方法是实现定制化对象创建的一种方式,提供了比直接声明Bean更高的灵活性。开发者可以根据需求选择实例工厂方法或静态工厂方法,以满足特定的应用场景。在实际项目中,应根据实际情况权衡...

    在jsp中用bean和servlet联合实现用户注册、登录

    在Java Web开发中,使用JSP、Servlet和JavaBeans(Bean)是常见的技术组合,它们可以协同工作以实现动态网页的功能,如用户注册和登录。以下是这个过程的详细解释: 1. **数据库设计**: 在本例中,数据库选用...

    Spring框架通过工厂创建Bean的三种方式实现

    虽然不是严格意义上的工厂模式,但Spring还提供了一种自定义Bean后处理的机制——`BeanPostProcessor`。开发者可以通过实现这个接口并在配置中注册,从而在Bean实例化之后、初始化之前或初始化之后进行定制操作。...

    深度转换Bean<->Bean的Mapper

    BeanMapper是一个实用工具,可以帮助我们高效地实现Bean到Bean的深度转换。本文将深入探讨BeanMapper的工作原理、如何使用它以及其背后的源码分析。 首先,BeanMapper的核心功能是将一个对象的属性值复制到另一个...

    jdk代理,cgib代理和spring后处理bean的关系

    本文将围绕“JDK代理”、“CGI代理”以及它们与Spring后处理Bean的关系进行深入探讨。 首先,JDK代理,也称为接口代理,是Java内置的一种动态代理机制。通过实现`java.lang.reflect.InvocationHandler`接口并调用`...

    day38 09-Spring类的完整生命周期及后处理Bean

    - `InitializingBean`后处理:如果Bean实现了`InitializingBean`接口,Spring会调用`afterPropertiesSet()`方法。 5. **容器级回调**: 如果Bean定义了`@PostConstruct`注解的方法,Spring会在初始化后调用。这为...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    我做了个简单的性能测试,发现从bean工厂里单例执行方法效率比new对象执行慢很多

    在Spring框架中,Bean工厂就是一种实现单例模式的方式,它负责管理和维护Bean的生命周期。当从Bean工厂获取一个单例Bean时,如果该Bean已经存在,则直接返回,否则会首次创建并缓存。 而直接通过`new`关键字实例化...

    Spring Bean创建初始化流程.docx

    `createBean(beanName, mbd, args)`在`AbstractAutowireCapableBeanFactory`中实现,它负责根据Bean定义创建Bean实例。 8. **实际创建Bean**: 在`doCreateBean()`方法中,Spring会创建Bean的实例,`...

    SSH笔记-静态/实例工厂方法配置bean

    在Spring框架中,Bean的创建方式多样,其中两种常见的非XML配置方式是通过静态工厂方法和实例工厂方法来创建Bean。这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态...

    一种面向对象的Java Bean查询方法的实现

    ### 一种面向对象的Java Bean查询方法的实现 #### 概述 在Java开发中,尤其是在涉及数据库操作的应用场景下,传统的做法是直接在Java Bean中编写SQL语句来完成数据的增删改查等操作。然而,这种方法存在一些明显的...

    singleton Bean 创建 prototype Bean

    理解并掌握Singleton和Prototype Bean的作用域对于优化Spring应用性能、管理Bean的生命周期以及正确处理依赖关系至关重要。在设计系统时,需要根据对象的需求来选择合适的作用域,以达到最佳的性能和可维护性。在...

    反射实现的bean转换类

    反射实现的bean转换类,配合类型转换器,告别所有bean转vo,bean转dto,dto转bean,vo转bean,什么构造器转换之类的,简直浪费程序员生命

    MD5的Java Bean实现

    前者用于MD5计算,后者用于处理找不到所需算法的情况。 ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; ``` 3. **创建`Md5Bean`类**: - 定义一个`Md5Bean`类,...

    Spring的bean生命周期

    2. **运行**:容器启动后,它可以管理Bean的生命周期,处理Bean之间的依赖关系,响应来自应用程序的请求来获取Bean。 3. **关闭**:当应用程序关闭或者需要释放资源时,通过调用ApplicationContext的close()方法...

    09-IoC配置-静态工厂与实例工厂创建bean

    Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...

    ejb有状态bean和无状态bean

    每次客户端调用方法时,服务器都会从Bean池中选择一个可用的实例来处理请求。由于没有状态,多个客户端可以并发地调用同一个实例,提高了系统的性能和可伸缩性。 无状态会话Bean适用于那些不需要跟踪会话信息或业务...

    spring 5.2.9 07 源码分析-spring的bean工厂准备工作 断点注释

    07 源码分析-spring的bean工厂准备工作

Global site tag (gtag.js) - Google Analytics