gpt4 book ai didi

SPRING:在 spring 中由工厂实例化创建的 bean 中使用 Autowiring

转载 作者:行者123 更新时间:2023-12-01 14:34:19 25 4
gpt4 key购买 nike

您好,我无法将我的 bean Autowiring 到另一个使用工厂方法实例化的 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 的实例时。 Autowiring 不会发生,它返回 NULL 即 x 为空。因此,在调用 getName 时出现空指针异常

你有什么解决办法吗??或者我正在做一些事情??

最佳答案

当您通过 new 创建对象时,autowire\inject 不起作用...

作为解决方法,您可以试试这个:

并以这种方式创建一个距离

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;

关于SPRING:在 spring 中由工厂实例化创建的 bean 中使用 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com