我创建了一个简单的SpringBoot应用程序。 有两个类:
1)ManagedBean类
@Component
class ManagedBean
{
public void fn()
{
System.out.println("B doin nothing");
}
}
2)NonmangedBean:它具有ManagedBean类的依赖性
class NonmangedBean
{
@Autowired
ManagedBean mb;
public void fn()
{
mb.fn();
System.out.println("doin nothing");
}
}
第三个服务类有Rest End点。
@RestController
@RequestMapping("/")
class Service
{
@Autowired
AutowireCapableBeanFactory beanFactory;
@Autowired
ApplicationContext applicationContext;
@GetMapping("/getBeanNames")
public List<String> printBeans()
{
return Arrays.asList(applicationContext.getBeanDefinitionNames());
}
@GetMapping("/processBean")
public String processBean()
{
NonmangedBean nb = new NonmangedBean();
beanFactory.autowireBean(nb);
nb.fn();
return "Success";
}
}
首先,我调用/ processBean端点,它将创建NonmangedBean类的Object并自动装配它。 (这里我的理解是bean将存在于Spring容器中,直到我关闭服务器。)
之后我点击/ getBeanNames端点获取Spring Container中的所有bean名称,但是我没有在列表中找到NonmangedBean。我在该列表中找到了ManagedBean。
问题:
1)这种类型的(NonmangedBean)自动装配的bean是否会存储在Spring Container中? 2)请求流程完成后,这种类型的自动装配豆会死吗? 3)我在printBeans方法中做错了吗?我应该使用除applicationContext以外的任何东西来获取SpringBean列表吗? 打开你的建议。提前谢谢。
答案 0 :(得分:0)
在这里,我理解豆子将存在于Spring容器中直到我 关闭服务器
您的理解是错误的,它会因请求而死亡,即对象的范围仅在该方法(processBean
)内。容器将不管理您的bean。除此之外,使用
@Autowired
。由于容器没有管理它,它将为null(除非你使用beanFactory.autowireBean();
注入它)并因此回答你的问题,如果你可以使用spring服务打印任何这样的bean是没有