![](/img/trans.png)
[英]Is it possible pass non-managed arguments/bean args along with @value and/or spring managed bean
[英]Print non-managed Spring bean name
我创建了一个简单的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");
}
}
第三类服务具有休息点。
@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 Container中。)
之后,我点击/ getBeanNames端点以获取Spring Container中的所有bean名称,但是在列表中没有找到NonmangedBean。 我在该列表中找到ManagedBean。
问题:
1)这种类型的(NonmangedBean)自动接线的豆是否可以存储在Spring Container中? 2)这种自动装配的bean是否会在请求过程完成后就死掉? 3)我在printBeans方法中做错了什么吗? 除了applicationContext之外,我还应该使用其他任何东西来获取SpringBean列表吗? 打开您的建议。 提前致谢。
在这里我很理解豆子将一直存在于Spring Container中直到我关闭服务器
您的理解是错误的,它将随请求而死,即对象的范围仅在该method( processBean
)内。 容器将无法管理您的bean。 除此之外,使用没有意义
@Autowired
在非托管bean中。 由于容器不对其进行管理,因此它将为null(除非您使用beanFactory.autowireBean();
注入它),因此回答了您是否可以使用spring服务打印任何此类bean的问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.