use*_*964 5 spring dependency-injection spring-3
我正在准备一个豆子,它存在于我正在使用的一个罐子里.
该类具有setter方法,这些方法不符合Spring框架期望执行注入的标准setter方法名称(例如,该属性userName具有setter方法addUserName而不是setUserName).
有没有办法在注入属性时指定setter方法名?
小智 8
可以使用MethodInvokingFactoryBean类来执行此操作.通过这个,您可以在目标对象上调用方法.
使用Spring实例化对象,然后调用addUserName它.
我不确定你是否可以用注释来做到这一点,但是你可以使用XML.例如:
package some.pack;
public class Target {
private String userName;
public Target() {
...
}
public void addUserName(String userName) {
this.userName = userName;
}
...
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下内容userName在Target实例上设置属性:
<!-- first create your Target object -->
<bean id="target" class="some.pack.Target" />
<!-- then set the userName property by calling the non-conventional setter -->
<bean id="caller" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="target" />
<property name="targetMethod" value="addUserName" />
<property name="arguments">
<list>
<value>John_Doe</value>
</list>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是,如果需要调用多个方法,则必须为每个方法添加一个"调用者"bean.这将增加您必须编写的XML的大小.
此外,您可以使用适配器模式将对象包装成符合getXXX/ setXXX约定的内容,并在包装器上以标准方式执行DI.
不,据我所知,没有办法。
您可以使用注释自动装配。您可以使用构造函数注入。
我不认为打破标准有什么好处,但我看到了很多缺点。如果您打破等级并调用方法“setUsername”,会对您的设计造成什么损害?
| 归档时间: |
|
| 查看次数: |
5500 次 |
| 最近记录: |