spring FactoryBean MethodInvokingFactoryBean

1,186 阅读1分钟

是什么

字面看很简单,就是工厂(BeanFactory)创建的对象Bean,起个名字叫FactoryBean,当然spring毕竟是个框架,面向接口编程。 所以它是个接口。

MethodInvokingFactoryBean

字面 就是执行某个方法。一般的场景是一些参数的设置,比如日志开关等。 仅仅是接口是没什么用处的,必须有实现类类做具体的操作。要么自己实现或者看默认实现能否满足自己的需求。 默认实现了:MethodInvokingBean -> (参数方法) -> MethodInvoker(方法).

  1. MethodInvokingBean :方法反射的对象。使用到了 JDK 的 ClassLoader (java 虚拟机类加载的知识)。
  2. ArgumentConvertingMethodInvoker:TypeConverter 类型转换的作用。
  3. MethodInvoker:targetObject targetMethod arguments 三个参数都是实现类 MethodInvoker 的属性。

实例

redis的配置 或者 rocketmq的日志开关。

org.apache.rocketmq.client.log.ClientLogger 
Boolean isloadconfig = Boolean.parseBoolean(System.getProperty("rocketmq.client.log.loadconfig", "true"));
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" value="#{@systemProperties}" />
        <property name="targetMethod" value="putAll" />
        <property name="arguments">
            <props>
                <prop key="rocketmq.client.log.loadconfig">false</prop>
            </props>
        </property>
    </bean>

其中#{@systemProperties}及redis的例子点我