您好我无法将我的bean自动装入使用工厂方法实例化的另一个bean中。
class A{
private String name;
//getters and setters for name
}
class B{
@Autowired
private A x;
private B(String Gender, String jobProfile){
String name = x.getName();
//some code
}
public static getInstance(String Gender,String jobProfile){
//some code for instantiation.
}
}
现在,当我使用工厂方法从一些不同的类创建类B的实例时。自动装配不会发生,它返回NULL,即x将变为空。因此,在此
上调用getName时,我得到空指针异常你有解决方案吗?或者我正在做一些事情?
答案 0 :(得分:1)
当你用new创建一个对象时,autowire \ inject不会工作......
作为解决方法,你可以试试这个:
以这种方式创建一个istance
context.getBean("myBean");
PROTOTYPE :这可以使单个bean定义包含任意数量的对象实例。
配置
<bean id="a" class="..." >
<bean id="b" class="..." scope="prototype">
<bean id="factory" class="..." >
工厂类
public class Factory implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
this.applicationContext = applicationContext;
}
public B createClass(){
context.getBean("b");
}
public B createClass(Object... args){
context.getBean("b",args);
}
}
通过这种方式,Autowired注释可以正常工作。
正如Javadocs所说的getBean ..
/**
* Return an instance, which may be shared or independent, of the specified bean.
* <p>Allows for specifying explicit constructor arguments / factory method arguments,
* overriding the specified default arguments (if any) in the bean definition.
* @param name the name of the bean to retrieve
* @param args arguments to use if creating a prototype using explicit arguments to a
* static factory method. It is invalid to use a non-null args value in any other case.
* @return an instance of the bean
* @throws NoSuchBeanDefinitionException if there is no such bean definition
* @throws BeanDefinitionStoreException if arguments have been given but
* the affected bean isn't a prototype
* @throws BeansException if the bean could not be created
* @since 2.5
*/
Object getBean(String name, Object... args) throws BeansException;
答案 1 :(得分:1)
在@Autowired文档中,表示字段在对象构建后自动装配。
因此,在您的代码中,当您尝试在构造函数中使用x
时,Spring没有喷射x.getName()
。
您有几种选择: