【问题标题】:What is a Spring "stereotype"?什么是春天的“刻板印象”?
【发布时间】:2013-01-23 06:28:06
【问题描述】:

在 SpringSource 博客条目中,以下句子引用了一个刻板印象

因为@Controller 是Spring 的@Component 的特化 刻板印象注释,类会被自动检测到 Spring容器作为容器组件扫描的一部分 进程,创建一个 bean 定义并允许实例 像任何其他 Spring 管理的组件一样注入依赖项。

这个词刻板印象的用法是指什么?这是一个技术性的 Spring 术语吗?还是只是一般意义上的刻板印象?

【问题讨论】:

    标签: spring spring-annotations stereotype


    【解决方案1】:

    JavaDoc 说了一点。

    表示类型或方法在整体架构中的作用的注释(在概念级别,而不是实现级别)。

    来自Merriam-Websterstereotype 的名词定义是这样说的:

    符合固定或一般模式的东西;尤指:群体成员共同持有的标准化心理图景,代表一种过于简单化的观点、偏见的态度或不加批判的判断

    似乎是为了建议正在注释的特定类的角色。这似乎是有道理的,因为通常建议您使用@Controller 注释您的控制器类,使用@Service 注释服务类等等。

    除了明显的组件扫描功能外,Spring 建议它们为您的 AOP 需求做出很好的切入点划分。

    【讨论】:

    • 我赞成这个答案,因为当我试图理解一个新概念时,这些技术术语与基础概念的关系如何帮助我消化。在 UML 中也存在刻板印象,用于创建可重用 &来自现有元类的可扩展域组件作为模板。
    【解决方案2】:

    这是一个技术性的 Spring 术语吗?还是只是一般意义上的刻板印象?

    我认为 Spring 将 Stereotype 一词从现实世界借用为 Spring 的技术术语。

    来自美国英语词典:

    (名词)对特定类型的人或事物的广泛持有但固定且过于简单的形象或想法。

    在现实世界中,我们知道一些刻板印象,例如:美国人喜欢喝咖啡。英国人喜欢喝茶。当然,并非对所有美国人或英国人都是如此。它只是对美国人或英国人的过度简化。

    使用刻板印象帮助我们更快地做出决定。当你的美国朋友过来时,不要问他们“你想喝什么?”并等待他们的回应。你可以假设他们想要一杯咖啡。

    在 Spring 中,构造型帮助我们简化对象创建。您不需要定义Type 之间的关系,因为您对Type 进行了刻板印象。

    注意:Type in Java。类是Type


    假设我们有这些类:

    public abstract class Friend {
    
        public abstract String favoriteDrink();
    }
    
    public class American extends Friend {
    
        @Override
        public String favoriteDrink() {
            return "Coffee";
        }
    }
    

    没有刻板印象

    您必须在配置中定义 Friend 和 American(Friend is-an American)之间的关系。

    @Configuration
    public class YourAppConfig {
    
        @Bean
        public Friend defineFriend() {
            return new American();
        }
    }
    

    所以,在测试中你可以验证:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class YourAppTest {
    
        @Autowired
        private Friend friend;
    
        @Test
        public void drinkTest() {
            assertEquals(friend.favoriteDrink(), "Coffee");
        }
    }
    

    带有刻板印象

    Stereotype 直接在 Class 声明上告诉 Spring,所有 Friend 都是美国人。

    @Component
    public class American extends Friend {
    
        @Override
        public String favoriteDrink() {
            return "Coffee";
        }
    }
    

    如果您的班级遇到 Friend 班级,它将假定它是美国人。这是朋友和美国人之间的一对一关系。

    如果您希望您的班级以这种方式行事,这将非常有用。您不需要在配置文件中定义 Bean。 (您甚至不需要配置文件)。 Spring 将自动从该 Stereotype 创建一个 Bean。


    这就是为什么 Component、Repository、Service 和 Controller 注释属于 Stereotype 包的原因。 Spring 不太关心你的类的细节,从 Spring 的角度来看,你的类是 RepositoryServiceController,如果它不属于其中任何一个,那么它是 Component .

    Spring 只是让你的类过度简化。因此,名称 Stereotype。

    【讨论】:

    • 超级!!..@aldok
    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2022-01-15
    相关资源
    最近更新 更多