gpt4 book ai didi

java - 使用 ClassPathXmlApplicationContext 以编程方式创建 Bean 但无法获取 bean; Spring

转载 作者:行者123 更新时间:2023-11-30 09:24:29 25 4
gpt4 key购买 nike

ClassPathXmlApplicationContext ct = new ClassPathXmlApplicationContext();

ct.refresh();
ConfigurableListableBeanFactory bf = ct.getBeanFactory();

Ad bean = (Ad) bf.createBean(Ad.class);
System.out.println("bean ="+bean);
System.out.println("size= "+bf.getBeansOfType(Ad.class).size()); // print 0

Ad类,这里是Ad类信息,AD扩展了AbstractAd类:

public class Ad {

@Override
public String toString() {
return "ad[adid=" + this.getId() + "]";
}

这是日志:

[DEBUG] Creating instance of bean 'com.Ad'
[DEBUG] Finished creating instance of bean 'com.Ad'
bean = ad[adid=null]
size= 0

在我看来,size 应该是 1,有什么问题吗?

ps: 最后我使用 GenericApplicationContext 和 BeanDefinition 并成功创建 Bean 并从上下文中获取,

   GenericApplicationContext ct = new GenericApplicationContext();

ct.refresh();

ConfigurableListableBeanFactory bf = ct.getBeanFactory();
System.out.println("--------------start------------/n--------------------------/n-------------------/n");

BeanDefinition definition = new RootBeanDefinition(Ad.class);
ct.registerBeanDefinition("sampleService",
System.out.println(bf.getBeansOfType(Ad.class).size()); //print 1

日志:

[DEBUG] Creating instance of bean 'sampleService'
[DEBUG] Eagerly caching bean 'sampleService' to allow for resolving potential circular references
[DEBUG] Finished creating instance of bean 'sampleService'
1

但我仍然想知道:为什么 getBeansOfType(Ad.class).size() 在 ClassPathXmlApplicationContext creteBean 之后为 0

最佳答案

在 ClassPathXmlApplicationContext 中,您没有传递任何 XML,如果您传递任何 spring 配置 xml,那么它将显示预期结果。 Ad bean = (Ad) bf.createBean(Ad.class); 将只创建一个类的 bean。但它不会将其添加到小枝上下文中。

在第二个代码中,您使用 registerBeanDefinition 方法注册了您的 bean。这样它就显示出预期的结果。

我试过下面的代码,它有效

ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("/Beans.xml");
classPathXmlApplicationContext.refresh();
ConfigurableListableBeanFactory beanFactory = classPathXmlApplicationContext.getBeanFactory();
System.out.println(beanFactory.getBeansOfType(HelloWorld.class).size());

关于java - 使用 ClassPathXmlApplicationContext 以编程方式创建 Bean 但无法获取 bean; Spring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15682231/

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