Spring @Controller,@Service,@repository,@Component注解

引入

在过去我们通过在xml中加入标签的形式去将类交给Spring Bean容器管理,但是当我们的组件过多的时候,我们这种标签的形式显得麻烦而又复杂。
因此我们引入了@Controller,@Service,@repository,@Component注解。
这些注解作用于类上,他的作用等价于标签。
例如:

@Controller
public class UserController {}

等价于:

<bean id="userController" class="com.study.controller.UserController"></bean>

那么@Controller,@Service,@repository,@Component有什么区别呢?

注解的区别

其实几个注解并没有太大的区别,仅仅是为了区分我们的工作不同。
@Controller 放到控制层类的头上,我相信凡是学过三层架构的应该懂我什么意思。
@Service 放到业务层的头上,
@Repository 放到数据持久层的头上,
@Component 放到一些中立的类头上,
当然也是有一点区别的:
我们知道前端控制器会有一个映射表,他会把@Controller标记的类存放进去,便于处理前端请求。

如何使用

那么我们如何让这些注解生效呢?
我通过例子来说明:
让注解生效,开启包扫描
包路径特点: 给定包路径,则自动扫描同包及子孙包中的类
base-package: 根据指定的包路径 查找注解
写方式: 多个包路径 使用,号分隔

  <context:component-scan base-package="com.study.controller,com.study.service,com.study.dao"></context:component-scan>
<context:component-scan base-package="com.study"></context:component-scan>

业务需求1: 只想扫描@controller注解
属性说明: use-default-filters=“true”
默认规则 :true 表示可以扫描其他注解
:false 按照用户指定的注解进行加载,默认规则不生效

   <context:component-scan base-package="com.jt" use-default-filters="false">
      <context:include-filter type="annotation"
            expression="org.springframework.stereotype.Controller"/>
   </context:component-scan>

业务需求1: 不想扫描@controller注解

   <context:exclude-filter type="annotation"
            expression="org.springframework.stereotype.Controller"/>
   </context:component-scan>
上一篇:linux下安装openjdk1.8


下一篇:spring注解整一篇