繁体   English   中英

打印非托管的Spring 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM