春豆有啥作用?

Posted

技术标签:

【中文标题】春豆有啥作用?【英文标题】:What is role in spring bean?春豆有什么作用? 【发布时间】:2020-12-30 01:08:23 【问题描述】:

我正在学习spring bean。我在BeanDefinition 中发现使用@Role 我们可以将角色添加到bean。但我不明白什么时候申请这个角色。我的意思是这个注释的效果是什么?人们何时以及如何使用此注释?我已阅读文档但无法正确理解

/**
     * Role hint indicating that a @code BeanDefinition is a major part
     * of the application. Typically corresponds to a user-defined bean.
     */
    int ROLE_APPLICATION = 0;

    /**
     * Role hint indicating that a @code BeanDefinition is a supporting
     * part of some larger configuration, typically an outer
     * @link org.springframework.beans.factory.parsing.ComponentDefinition.
     * @code SUPPORT beans are considered important enough to be aware
     * of when looking more closely at a particular
     * @link org.springframework.beans.factory.parsing.ComponentDefinition,
     * but not when looking at the overall configuration of an application.
     */
    int ROLE_SUPPORT = 1;

    /**
     * Role hint indicating that a @code BeanDefinition is providing an
     * entirely background role and has no relevance to the end-user. This hint is
     * used when registering beans that are completely part of the internal workings
     * of a @link org.springframework.beans.factory.parsing.ComponentDefinition.
     */
    int ROLE_INFRASTRUCTURE = 2;

【问题讨论】:

这用于指示 bean 在应用程序中扮演的“角色”(属于哪个类别)。您很少需要在自己的 bean 上使用 @Role 注释,据我所知,Spring 不会将它用于任何必要的事情。也许它是用来调试的。 【参考方案1】:

如 cmets 中所述,它们只是提示用户了解此 bean 实际用途的线索。

一个可能的用例是确保当前在上下文中注册了哪些 bean:

    public static void getBeanRoleInfo(GenericApplicationContext ctx) 

        int[] beanCntByRole = new int[3];
        for (String name : ctx.getBeanDefinitionNames()) 
            int roleNo = ctx.getBeanDefinition(name).getRole();
            beanCntByRole[roleNo]++;
        

        System.out.println("ROLE_APPLICATION : " + beanCntByRole[0] +
                "\n" + "ROLE_SUPPORT : " + beanCntByRole[1] +
                "\n" + "ROLE_INFRASTRUCTURE : " + beanCntByRole[2]
        );
    

顺便说一句,Spring 团队没有使用 enum class 的原因是 Spring 的早期版本没有 jdk 1.5 之后可用的 enum class。

如果你想设置,可以使用@Role注解。

【讨论】:

以上是关于春豆有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

SynchronizationContext 有啥作用?

函数的作用域和类的作用域有啥区别

BluetoothGatt.setCharacteristicNotification() 有啥作用?

并联电阻有啥作用

“@”有啥作用?

分号有啥作用?