什么是春天的“刻板印象”?

问题描述 投票:35回答:2

在SpringSource博客条目中,以下句子引用了构造型。

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

这个单词刻板印象的用法是什么?这是一个技术性的春季术语吗?或者只是在一般意义上使用的刻板印象?

spring spring-annotations stereotype
2个回答
52
投票

JavaDoc说了一下。

注释表示类型或方法在整体架构中的角色(在概念而非实现级别)。

来自stereotypeMerriam-Webster的名词定义说:

符合固定或一般模式的东西;特别是:一个标准化的心理图像,由一个群体的成员共同拥有,代表一种过于简单的观点,偏见的态度或不加批判的判断

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

除了明显的组件扫描功能外,Spring还建议他们为您的AOP需求提供良好的切入点划分。


2
投票

这是一个技术性的春季术语吗?或者只是在一般意义上使用的刻板印象?

我认为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";
    }
}

没有刻板印象

你必须在配置中定义朋友和美国人(朋友是美国人)之间的关系。

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

使用刻板印象

刻板印象告诉Spring,所有朋友都是美国人,直接在Class声明中。

@Component
public class American extends Friend {

    @Override
    public String favoriteDrink() {
        return "Coffee";
    }
}

如果你的课程遇到一个朋友课程,它将假设它是一个美国人。这是朋友和美国人之间的一对一关系。

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


这就是组件,存储库,服务和控制器注释属于Stereotype包的原因。 Spring并不关心你的类的细节,从Spring的角度来看,你的类是RepositoryServiceController,如果它不属于任何一个,那么它就是Component

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

© www.soinside.com 2019 - 2024. All rights reserved.