承接上文

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. 1行代码为每个Controller自定义“TabBar”-b

    这篇文章大致会带你实现以下的功能,废话少说,先看东西: JPNavigationController.gif Q&A:Demo里都有那些东西? 01.关于自定义导航栏 01.第一个控制器的导航 ...

  2. ctf总结

    在过去的一个学期中,草人在西普学院还有一些其他安全夺旗网站上刷了一些题,草人我是菜鸟一个,刚开始很是苦恼,所以经历过以后希望将之分享给一起学习安全的同学,目的呢是希望以后学习的人能尽快理清学习思路,进 ...

  3. 《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现2

    原文:<ArcGIS Engine+C#实例开发教程>第七讲 图层符号选择器的实现2 摘要:在第七讲 图层符号选择器的实现的第一阶段中,我们完成了符号选择器窗体的创建与调用.在第二阶段中, ...

  4. Android 国际化图片资源文件

    国际化 与字符串国际相似,在 res 下新建 drawable-zh 文件夹,存放中文环境下的图片        新建 drawable-en 作为英语环境下的图片        在 eclipse ...

  5. Java SE知识点

    Java概述 Java的运行机制 JDK,JRE,JVM Java开发环境搭建 用记事本编写运行一个Hello World的完整过程 如何在Java中使用注释 使用Eclipse开发Java程序 使用 ...

  6. scp传入固件,sysupgrade xx.bin升级固件

    scp传入固件,sysupgrade xx.bin升级固件

  7. 对ASP.NET程序员非常有用的85个工具

    介绍 这篇文章列出了针对 ASP.NET 开发人员的有用工具. 工具 1. Visual Studio Visual Studio Productivity Power tool:Visual Stu ...

  8. Setting Up the ADT Bundle

    Setting Up the ADT Bundle The ADT Bundle provides everything you need to start developing apps, incl ...

  9. VS2010+WINDBG+VMWARE9.0和fatal error RC1106: invalid option: -ologo错误

    提供属性配置文件一份: http://pan.baidu.com/s/1iS1Ix <?xml version="1.0" encoding="utf-8" ...

  10. Android 访问 wcf

    IService1.cs 添加的接口 [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageB ...