1.基于注解管理Bean

(1) 标识组件常用注解
  注解一般分为以下四个注解:

  • @Component:将类标识为普通组件
  • @Controller:将类标识为控制层组件
  • @Service:将类标识为业务层组件
  • @Repository:将类标识为持久层组件
      以上四个的功能都是相当于在XML标识一个Bean
      @Controller、@Service、@Repository这三个注解只是在@Component注解的基础上起了三个新的名字
      对于Spring使用IOC容器管理这些组件来说没有区别。所以@Controller、@Service、@Repository这三个注解只是给开发人员看的,让我们能够便于分辨组件的作用。
      如果一个类不是这三个层次,可以标识注解@Component

(2) 扫描组件

  1. 最基本的扫描方式
<!--扫描组件,告诉spring哪里有注解-->
    <context:component-scan base-package="com.hnnd.spring"/>
  1. 指定要排除的组件
       <context:component-scan>标签拥有子标签context:exclude-filter,其中它有两个属性可以指定排除组件的方法。
  • type:设置排除或包含的依据
  • type="annotation",根据注解排除,expression中设置要排除的注解的全类名
<context:component-scan base-package="com.hnnd.spring">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
  • type="assignable",根据类型排除,expression中设置要排除的类型的全类名
<context:component-scan base-package="com.hnnd.spring">
        <context:exclude-filter type="assignable" expression="com.hnnd.spring.controller.UserController"/>
    </context:component-scan>

  显然是用注解的方式比较多。

  1. 指定要包含的组件
       <context:component-scan>标签拥有子标签<context:include-filter>,其中它有两个属性可以指定包含组件的方法。
      但是<context:component-scan>有属性use-default-filters属性默认为true,也就是扫描指定包下所有的类(这时只有exclude-filter才能生效),而且<context:include-filter>是指定在原有扫描规则的基础上追加的规则。因此我们需要将true改成false,才能让追加规则生效
    <context:component-scan base-package="com.hnnd.spring" use-default-filters="false">
<!--        type:设置排除或包含的依据-->
<!--        type="annotation",根据注解排除,expression中设置要排除的注解的全类名-->
<!--        type="assignable",根据类型排除,expression中设置要排除的类型的全类名-->
<!--        <context:exclude-filter type="assignable" expression="com.hnnd.spring.controller.UserController"/>-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

(3) 基于注解的bean的id
  默认情况下,注解+扫描基础上类名首字母小写就是bean的id。例如:\(UserController\)类对应的bean的id就是\(userController\)
  但是允许自定义id,也就是注解的\(value\)就是\(id\)的值

@Controller("userController")
public class UserController {
}
posted @ 2022-11-08 18:07  acmloser  阅读(26)  评论(0编辑  收藏  举报