簡體   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