什么是春天的"刻板印象"?

cha*_*had 38 spring stereotype spring-annotations

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

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

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

nic*_*ild 56

JavaDoc对此有所说明.

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

的名词定义stereotype,从韦氏这样说:

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

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

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

  • 我正在投票给出这个答案,因为当我试图理解一个新概念时,这些技术术语如何与底层概念相关联有助于我消化.在UML中也存在用于从现有元类创建可重用和可扩展域组件的表型.作为模板. (2认同)

ald*_*dok 10

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

我认为 Spring 从现实世界借用了术语 Stereotype 到 Spring 的技术术语。

来自美式英语词典:

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

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

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

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

注意:Type在 Java 中。类是一个Type.


假设我们有这些类:

public abstract class Friend {

    public abstract String favoriteDrink();
}

public class American extends Friend {

    @Override
    public String favoriteDrink() {
        return "Coffee";
    }
}
Run Code Online (Sandbox Code Playgroud)

没有刻板印象

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

@Configuration
public class YourAppConfig {

    @Bean
    public Friend defineFriend() {
        return new American();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,在测试中您可以验证:

@RunWith(SpringRunner.class)
@SpringBootTest
public class YourAppTest {

    @Autowired
    private Friend friend;

    @Test
    public void drinkTest() {
        assertEquals(friend.favoriteDrink(), "Coffee");
    }
}
Run Code Online (Sandbox Code Playgroud)

有刻板印象

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

@Component
public class American extends Friend {

    @Override
    public String favoriteDrink() {
        return "Coffee";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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


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

Spring 只是过度简化了你的类。因此,名称定型。