当前位置: 首页 > 知识库问答 >
问题:

打印非托管Springbean名称

东方华晖
2023-03-14

我创建了一个简单的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结束点。

@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";
    }
}

首先,我调用 /processBeanendpoint,将具体对象的NonmangedBean类和自动连接它。(在这里,我知道bean将生活在Spring Container中,直到我关闭服务器。)

之后,我点击/getBeanNamesendpoint以获取Spring容器中的所有bean名称,但在列表中找不到NonChangedBean。我发现ManagedBean在那个列表中。

问题:

1) 这种类型的(非更改bean)自动连线bean是否会存储在Spring容器中?2) 这种类型的自动连线bean会在请求过程完成后立即消失吗?3) 我在printBeans方法中是否做错了什么?我应该使用applicationContext以外的任何东西来获取SpringBean列表吗?欢迎你的建议。提前谢谢。

共有1个答案

商运锋
2023-03-14

我的理解是,在我关闭服务器之前,bean将一直存在于Spring容器中

您的理解是错误的,它将随着请求而消失,即对象的范围仅在该方法(processBean)内。容器将不会管理您的bean。除此之外,使用

在非托管bean中自动生成代码。由于容器不管理它,它将为空(除非您使用beanFactory.autowireBean();注入它),因此回答您的问题,如果您可以使用Spring服务打印任何这样的bean,则否

 类似资料:
  • 本文向大家介绍详解C# 托管资源和非托管资源,包括了详解C# 托管资源和非托管资源的使用技巧和注意事项,需要的朋友参考一下 托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收。 非托管资源指的是.NET不知道如何回收的资源,最常见的一类非托管资源是包装操作系统资源的对象,例如文件,窗口,网

  • 本文向大家介绍.NET中托管和非托管代码之间的区别,包括了.NET中托管和非托管代码之间的区别的使用技巧和注意事项,需要的朋友参考一下 .NET Framework具有CLR(公共语言运行时),可以执行用.NET语言编写的代码。CLR管理内存需求,安全性,代码优化,特定于平台的转换等。在非托管代码的情况下,不存在CLR,并且代码由操作系统直接执行。 以下是托管代码和非托管代码之间的一些重要区别。

  • 当我运行我的应用程序时,我收到一个错误。 应用程序结构 结构 pom.xml RestartApplication.java MvcConfig WebSecurityConfig 身份验证控制器(显示欢迎页面) 博客控制器 主控制器 注册控制器 邮政 角色 用户 后存储库 用户报告 我试图使用@EnableJpaRepositories和@EntityScan修复它,但这无济于事。在我的MySQ

  • 问题内容: 看来我们使用Quartz-JDBCJobStore以及Spring,Hibernate和Websphere的实现抛出了非托管线程。 我读了一些书,发现IBM的一篇技术文章指出将Quartz与Spring结合使用会导致这种情况。他们提出使用CommnonJ解决此问题的建议。 我进行了一些进一步的研究,到目前为止,我所看到的唯一示例都处理了不在数据库中的旧JobStore计划。 因此,我想

  • 是否可以在使用关键字创建的类中获取CDIBean的实例?我们目前正在对一个旧的应用程序进行一些增强,每次我们在应用程序中对CDI单例bean进行编程查找时,都会得到一个ContextNotActiveException。 获取参考的代码: BeanManager支持。JAVA

  • 打印时让应用程序管理颜色 1选择 “文件 ”>“打印 ”。 2选择 “打印 ”对话框左侧的 “色彩管理 ”。 3对于 “颜色处理 ”,请选择 “让 Illustrator 确定颜色 ”。 4对于 “打印机配置文件 ”,请选择与输出设备相应的配置文件。配置文件对输出设备行为和打印条件(如纸张类型)的描述越精确,色彩管理系统对文档中实际颜色值的转换也就越精确。 (请参阅第 124 页的 “关于颜色配置