承接上文

IObjectFactoryPostProcessor(工厂后处理器))


前提是实现接口的对象注册给当前容器

  1. 直接继承的对象调用这个postProcessBeanFactory方法,参数为工厂
  2. 添加对象配置在xml中用IApplicationContext自动注册
  1. 接口名称分别为.net的Spring.Objects.Factory.Config.IObjectFactoryPostProcessor
    与Java的org.springframework.beans.factory.config.BeanFactoryPostProcessor

    postProcessBeanFactory就一个方法,参数为创建工厂的对象,
    方法的作用就是可以在对象定义被载入容器之后并且在被实例化之前执行某些行为

  2. spring提供的实现类(两个接口的实现类唯一的不同点是一个
    是用占位符一个是直接用实例后对象的属性名)

    1. PropertyPlaceholderConfigurer,其中基本用法如下,默认当变量不存在对应的值的时候会获取系统的环境变量

      C#:这个类的参数是键值对存在的,configSections属性设置了那个节点为要获取的键值对,
      EnvironmentVariableMode为枚举,有三个可用值:Never、Fallback和Override。
      其中Fallback是默认值,会尝试用环境变量替换未在自定义键值对中找到匹配项的占位符
      ;Override则不理会自定义键值对中是否有与占位符匹配的键,直接用环境变量值替换占位符;
      Nerver即不使用环境变量进行替换

      <configuration>
      <configSections>
      <sectionGroup name="spring">
      <section name="context"
      type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      </sectionGroup>
      <section name="DaoConfiguration"
      type="System.Configuration.NameValueSectionHandler"/>
      <section name="DatabaseConfiguration"
      type="System.Configuration.NameValueSectionHandler"/>
      </configSections>
      <DaoConfiguration>
      <add key="maxResults" value="1000"/>
      </DaoConfiguration>
      <DatabaseConfiguration>
      <add key="connection.string"
      value="dsn=MyDSN;uid=sa;pwd=myPassword;"/>
      </DatabaseConfiguration>
      <spring>
      <context>
      <resource uri="config://spring/objects"/>
      </context>
      <objects>
      <object type="SpringBase.test,SpringBase">
      <property name="result" value="${maxResults}"/>
      <property name="connectionstring" value="${connection.string}"/>
      </object>
      <object
      type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer,
      Spring.Core">
      <property name="configSections">
      <value>DaoConfiguration,DatabaseConfiguration</value>
      </property>
      </object>
      </objects>
      </spring>
      </configuration>

      java:其中classpath前缀表示在类文件地址开始,
      searchSystemEnvironment设置是否搜索系统环境变量为布尔类型

      <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
      <list>
      <value>classpath:config.properties</value>
      </list>
      </property>
      </bean>
      <bean class="springdemo.test" singleton="false">
      <property name="name" value="${jdbc}" />
      <property name="url" value="${jdbc.url}" />
      </bean>

      config.properties

      jdbc=aaa
      jdbc.url=aaa
    2. PropertyOverrideConfigurer(和前面的区别替换的依据不是占位符,而是属性名)

      C#:其中的key为对象的属性名

      <configuration>
      <configSections>
      <sectionGroup name="spring">
      <section name="context"
      type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      </sectionGroup>
      <section name="DaoConfigurationOverride"
      type="System.Configuration.NameValueSectionHandler"/>
      </configSections>
      <DaoConfigurationOverride>
      <add key="test.result" value="1000"/>
      </DaoConfigurationOverride>
      <spring>
      <context>
      <resource uri="config://spring/objects"/>
      </context>
      <objects>
      <object id="test" type="SpringBase.test,SpringBase">
      <property name="result" value="11"/>
      </object>
      <object
      type="Spring.Objects.Factory.Config.PropertyOverrideConfigurer,
      Spring.Core">
      <property name="configSections">
      <value>DaoConfigurationOverride</value>
      </property>
      </object>
      </objects>
      </spring>
      </configuration>

      java:

      <bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
      <property name="locations">
      <list>
      <value>classpath:config.properties</value>
      </list>
      </property>
      </bean>
      <bean id="jdbc" class="springdemo.test" singleton="false">
      <property name="url" value="123" />
      </bean>

      config.properties

      jdbc.url=aaa

XI.spring的点点滴滴--IObjectFactoryPostProcessor(工厂后处理器)的更多相关文章

  1. Ⅹ.spring的点点滴滴--IObjectPostProcessor(对象后处理器)

    承接上文 IObjectPostProcessor(对象后处理器) 前提是实现接口的对象注册给当前容器 C#: 通过继承AbstractObjectFactory对象的AddObjectPostPro ...

  2. 品Spring:bean工厂后处理器的调用规则

    上一篇文章介绍了对@Configuration类的处理逻辑,这些逻辑都写在ConfigurationClassPostProcessor类中. 这个类不仅是一个“bean工厂后处理器”,还是一个“be ...

  3. Ⅸ.spring的点点滴滴--IObjectFactory与IFactoryObject的杂谈

    承接上文 ObjectFactory与IFactoryObject的杂谈 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class parent { pu ...

  4. 品Spring:详细解说bean后处理器

    一个小小的里程碑 首先感谢能看到本文的朋友,感谢你的一路陪伴. 如果每篇都认真看的话,会发现本系列以bean定义作为切入点,先是详细解说了什么是bean定义,接着又强调了bean定义为什么如此重要. ...

  5. spring的组件工厂后置处理器——BeanFactoryPostProcessor

    作用和调用时机 spring有两种后置处理器: 1. 组件后置处理器——org.springframework.beans.factory.config.BeanPostProcessor: 2. 工 ...

  6. Spring源码之BeanFactoryPostProcessor(后置处理器)

    Spring源码之BeanFactoryPostProcessor(后置处理器). 有点水平的Spring开发人员想必都知道BeanFactoryPostProcessor也就是常说的后置管理器,这是 ...

  7. Spring Bean后处理器以及容器后处理器【转】

    Bean后处理器:即当spring容器实例化Bean实例之后进行的增强处理. 容器后处理器:对容器本身进行处理,并总是在容器实例化其他任何Bean之前读取配置文件的元数据并可能修改这些数据. 一.Be ...

  8. Spring - BeanPostProcessor接口(后处理器)讲解

    概述: BeanPostProcessor接口是众多Spring提供给开发者的bean生命周期内自定义逻辑拓展接口中的一个,其他还有类似InitializingBean,DisposableBean, ...

  9. Spring框架——后处理器

    Bean的后处理 Spring容器实例化Bean实例之后进行的增强处理,关于这里的描述之前有点错误,现在来纠正一下:这个过程有点像AOP,不过我们知道AOP是对方法而言的,而Bean后处理器是针对Ja ...

随机推荐

  1. QR code 乱谈(一)

    缘由 促使草人写这一系列(将会是)文章的原因是二维码现在很流行,很容易接触到,而且二维码又是那么容易就生成——就不说有很多在线的生成器,许多应用软件也都有生成二维码的功能,比如Firefox浏览器.Q ...

  2. 如何创建phpinfo查看php信息?

    创建一个简单的文本文档并命名为phpinfo.php   代码如下: <?php phpinfo(); ?>   将上面的代码写入并保存该文档,通过浏览器访问这个文件即可显示PHP信息  

  3. node.js + gulp用JENKINS作CI编译

    这里还是有点坑,要注意. 安装NODE.JS不说,GULP绿色化也不说. 但要让JENKINS识别环境变量. /etc/profile.... export NODE_HOME=/usr/local/ ...

  4. TSS 任务状态段 详解

    http://blog.163.com/di_yang@yeah/blog/static/86118492201222210725146/1 什么是TSS TSS 全称task state segme ...

  5. NEERC 2010, Eastern subregional contest

    只能把补了的题目放这儿了,先留个坑,怕忘记. Problem G URAL 1806 Mobile Telegraphs 题意是:给定n个电话号码,每个号码是一个长度为10的仅含'0'~'9'的字符串 ...

  6. easyui源码翻译1.32--Slider(滑动条)

    前言 使用$.fn.slider.defaults重写默认值对象.下载该插件翻译源码 滑动条允许用户从一个有限的范围内选择一个数值.当滑块控件沿着轨道移动的时候,将会显示一个提示来表示当前值.用户可以 ...

  7. thinkphp 模板替换

    具体详见tp手册. 如果需要修改模板替换映射路径. 则需: 'TMPL_PARSE_STRING'=>array( '__PUBLIC__'=>__ROOT__.'/'.APP_NAME. ...

  8. D-Bus,kdbus和Binder

    http://blog.sina.com.cn/s/blog_4af327e10101irie.html 材料来自:The unveiling of kdbus 和 Kdbus Details .后一 ...

  9. 关于百度地图API的地图坐标转换问题

    原文:关于百度地图API的地图坐标转换问题 我在之前的文章利用html5获取经纬度并且在百度地图中显示位置中使用了百度地图的API来显示html5获取的地理位置,在文中我说过这样的话,我说百度地图的准 ...

  10. NIS 服务器

    有没有想过,如果我有十部 Linux 主机,这十部主机仅负责不同的功能,事实上, 所有的主机账号与对应的密码都相同!那么我是将账号与密码分别设定置在十部计算机上面, 还是可以透过一部主机做为账号管理的 ...