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

时间:2013-02-07 16:50:55

标签: spring spring-annotations stereotype

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

  

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

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

2 个答案:

答案 0 :(得分:51)

JavaDoc对此有所说明。

  

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

来自Merriam-Websterstereotype的名词定义说明了这一点:

  

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

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

除了明显的组件扫描功能外,Spring还建议他们为您的AOP需求制作精美的切入点划分。

答案 1 :(得分:1)

  

这是技术性春季学期吗?还是只是在一般意义上使用了刻板印象?

我认为Spring从现实世界借来的刻板印象一词是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,所有的Friend都是美国人,直接在Class声明上。

@Component
public class American extends Friend {

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

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

如果您希望您的班级表现出这种行为,这将非常有用。您无需为配置文件定义Bean。 (您甚至不需要配置文件)。 Spring将根据该构造型自动创建一个Bean。


这就是为什么Component,Repository,Service和Controller批注属于Stereotype包的原因。 Spring不太关心您的类的细节,从Spring的角度来看,您的类是RepositoryServiceController,如果它不属于任何此类,然后是Component

Spring只是对您的课程进行了过度简化。因此,名称为Stereotype。