什么是春天的“刻板印象”?
Posted
技术标签:
【中文标题】什么是春天的“刻板印象”?【英文标题】:What is a Spring "stereotype"? 【发布时间】:2013-01-23 06:28:06 【问题描述】:在 SpringSource 博客条目中,以下句子引用了一个刻板印象。
因为
@Controller
是Spring 的@Component
的特化 刻板印象注释,类会被自动检测到 Spring容器作为容器组件扫描的一部分 进程,创建一个 bean 定义并允许实例 像任何其他 Spring 管理的组件一样注入依赖项。
这个词刻板印象的用法是指什么?这是一个技术性的 Spring 术语吗?还是只是一般意义上的刻板印象?
【问题讨论】:
【参考方案1】:JavaDoc 说了一点。
表示类型或方法在整体架构中的作用的注释(在概念级别,而不是实现级别)。
来自Merriam-Webster 的stereotype
的名词定义是这样说的:
符合固定或一般模式的东西;尤指:群体成员共同持有的标准化心理图景,代表一种过于简单化的观点、偏见的态度或不加批判的判断
似乎是为了建议正在注释的特定类的角色。这似乎是有道理的,因为通常建议您使用@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 的角度来看,你的类是 Repository
、Service
和 Controller
,如果它不属于其中任何一个,那么它是 Component
.
Spring 只是让你的类过度简化。因此,名称 Stereotype。
【讨论】:
超级!!..@aldok以上是关于什么是春天的“刻板印象”?的主要内容,如果未能解决你的问题,请参考以下文章