Это можно сделать с помощью класса MethodInvokingFactoryBean .При этом вы можете вызвать метод для целевого объекта.
Вы создаете экземпляр своего объекта с помощью Spring, а затем вызываете addUserName
для него.
Я не уверен, что вы можете сделать это с аннотациями, но с XML вы можете.Например:
package some.pack;
public class Target {
private String userName;
public Target() {
...
}
public void addUserName(String userName) {
this.userName = userName;
}
...
}
Вы можете установить свойство 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>
Недостатком этого является то, что если вам нужновызовите несколько методов, вам нужно будет добавить bean-компонент для каждого метода.Это увеличит размер XML, который вам нужно написать.
Кроме того, вы можете использовать шаблон адаптера , чтобы обернуть ваш объект во что-то, соответствующее правилам getXXX
/ setXXX
вместо этого сделайте DI стандартным способом на обертке.