是什么
字面看很简单,就是工厂(BeanFactory)创建的对象Bean,起个名字叫FactoryBean,当然spring毕竟是个框架,面向接口编程。 所以它是个接口。
MethodInvokingFactoryBean
字面 就是执行某个方法。一般的场景是一些参数的设置,比如日志开关等。 仅仅是接口是没什么用处的,必须有实现类类做具体的操作。要么自己实现或者看默认实现能否满足自己的需求。 默认实现了:MethodInvokingBean -> (参数方法) -> MethodInvoker(方法).
- MethodInvokingBean :方法反射的对象。使用到了 JDK 的 ClassLoader (java 虚拟机类加载的知识)。
- ArgumentConvertingMethodInvoker:TypeConverter 类型转换的作用。
- 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的例子点我