Spring 什么是春天;刻板印象;?

Spring 什么是春天;刻板印象;?,spring,spring-annotations,stereotype,Spring,Spring Annotations,Stereotype,在SpringSource博客上,以下句子引用了一个原型 因为@Controller是Spring的@组件的专门化 原型注释,该类将由 Spring容器作为容器组件扫描的一部分 过程,创建bean定义并允许创建实例 像其他Spring管理的组件一样注入依赖项 这个词的用法指的是什么?这是春季术语吗?还是刻板印象只是在一般意义上使用的?这一点可以说 表示类型或方法在整个体系结构中的角色的注释(在概念层面,而不是实现层面) 来自的stereotype的名词定义如下: 符合固定或一般模式的事物;特别是

在SpringSource博客上,以下句子引用了一个原型

因为
@Controller
是Spring的
@组件的专门化
原型注释,该类将由
Spring容器作为容器组件扫描的一部分
过程,创建bean定义并允许创建实例
像其他Spring管理的组件一样注入依赖项

这个词的用法指的是什么?这是春季术语吗?还是刻板印象只是在一般意义上使用的?

这一点可以说

表示类型或方法在整个体系结构中的角色的注释(在概念层面,而不是实现层面)

来自的
stereotype
的名词定义如下:

符合固定或一般模式的事物;特别是:一组成员共同持有的标准化的心理图像,代表一种过于简单的观点、偏见的态度或不加批判的判断

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

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

这是春季术语吗?还是刻板印象只是一般意义上的

我认为Spring借用了现实世界中的术语刻板印象,将其作为Spring的技术术语

摘自《美国英语词典》:

(名词)某一特定类型的人或事物的广泛存在但固定且过于简单的形象或想法

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

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

在春季,原型帮助我们简化对象创建。您不需要定义
类型
之间的关系,因为您对
类型
进行了原型化

注:。类是
类型


假设我们有这些课程:

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");
    }
}
带有刻板印象

刻板印象告诉斯普林,所有的朋友都是美国人,直接在班级宣言上

@Component
public class American extends Friend {

    @Override
    public String favoriteDrink() {
        return "Coffee";
    }
}
如果您的类遇到一个Friend类,它将假定它是一个美国人。朋友和美国人之间是一对一的关系

如果您希望您的类以这种方式运行,这是非常有用的。您不需要为配置文件定义Bean。(您甚至不需要配置文件)。Spring将根据该原型自动创建一个Bean


这就是为什么组件、存储库、服务和控制器注释属于原型包的原因。 Spring不太关心类的细节,从Spring的角度来看,您的类要么是
存储库
服务
,要么是
控制器
,如果它不属于其中任何一个,那么它就是
组件


Spring只是让你的课程过于简单化了。因此,名称原型。

我投票支持这个答案,因为当我试图理解一个新概念时,这些技术术语如何与基础概念相关联帮助我理解。原型也存在于UML中,用于从现有的元类作为模板创建可重用和可扩展的域组件。超级@奥尔德克