我是Spring的新手,我想询问是否可以将params传递给init并销毁bean的方法。
感谢。
答案 0 :(得分:11)
示例Bean
public class Foo{
@Autowired
private Bar bar;
public void init(){
bar.doSomething();
}
}
示例XML:
<bean class="Foo" init-method="init" />
答案 1 :(得分:2)
当您无法像上一个答案中那样更改要创建的类时,此方法尤其有用,但您正在使用API,并且必须按原样使用提供的bean。
你总是可以创建一个实现FactoryBean的类(MyObjectFactory),并且在你应该编写的getObject()方法中:
@Autowired
private MyReferenceObject myRef;
public Object getObject()
{
MyObject myObj = new MyObject();
myObj.init(myRef);
return myObj;
}
在spring context.xml中你会有一个简单的:
<bean id="myObject" class="MyObjectFactory"/>
答案 2 :(得分:0)
protected void invokeCustomInitMethod(String beanName, Object bean, String initMethodName)
throws Throwable {
if (logger.isDebugEnabled()) {
logger.debug("Invoking custom init method '" + initMethodName +
"' on bean with beanName '" + beanName + "'");
}
try {
Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null);
if (initMethod == null) {
throw new NoSuchMethodException("Couldn't find an init method named '" + initMethodName +
"' on bean with name '" + beanName + "'");
}
if (!Modifier.isPublic(initMethod.getModifiers())) {
initMethod.setAccessible(true);
}
initMethod.invoke(bean, (Object[]) null);
}
catch (InvocationTargetException ex) {
throw ex.getTargetException();
}
}
查看Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null);
中的spring soruce代码
init方法是find,param是null