用来表示一个web控制层bean,用来前后端的交互!类似struts的action或servlet
二、@service
用来表示一个业务层bean
三、@repository
用来表示一个持久层bean,即数据访问层dao组件。
四、@component
用来表示一个平常的普通组件,当一个类不合适用以上的注解定义时用这个组件修饰。
需要注意的是@controller,@service,@repository都带有@component父注解,说明他们出来基本组件的属性外还有其他的场景应用,即如果不要springmvc其实他们就是一个普通的组件,但普通组件建议最好还是用@component修饰。
为了让spring字段扫描注册这些组件,需要在配置文件中加上扫描的配置,如扫描com.test下的注解:
<context:component-scan base-package="com.test" />
扫描配置默认use-default-filters="true",默认扫描@component注解即子注解,可以配置过滤只扫描哪些注解不扫描哪些注解。
要过滤扫描注解,只需相应的带上下面的子标签,可以有多个
<context:include-filter>
<context:exclude-filter>
如只扫描com.text包下的@controller和@service注解的组件
<context:component-scan base-package="com.test" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
关于type的定义
另外,<context:component-scan>配置可以有多个
@Resource,@Autowire的,@Injectz这3中都是用来注入bean的,他们属于不同的程序中。
一 、@Resource
他有两个关键的属性:name-名称,type-类型
1、如果指定了name,type,则从Spring容器中招一个名称和类型相应的一个bean,找不到则报错。
2、如果只指定了name,则从spring容器中找一个名称和name一样的bean,找不到则报错。
3、如果只指定了type,则从spring容器中找类型和type一样的bean,找不到就报错。
4、如果没有指定参数,则默认找字段名称装配,找不到则按类型,还找不到就报错。
二、@Autowire
默认按类型装配,找不到或者找到多个则报错。
如果要按名称装配,需要结合spring另外一个注解Qualifier(“name”)使用。
三、@Injectz
和@Autowire类似,可以完全代替@Autowire,但这个没有required属性,要求bean必须存在。