新的配置方式。

一、知识点

1.在classpath中扫描组件

组件扫描:bean能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。

特定组件包括:

  1. @component:基本注解,标示了一个受spring管理的组件。
  2. @respository:标示持久层组件。
  3. @service:标示服务层,业务层组件。
  4. @controller:标示表现层组件。

2.你需要使用特定注解

对于扫描到的组件,spring有默认的命名规则,使用非限定类名,第一个字母小写,也可以在注解中通过value属性值标示组件的名称。

3.当在组件类上使用了特定的注解之后,还需要在spring的配置文件中声明<context:component-scan>

base-package属性制定一个需要扫描的基类包,spring容器将会扫描这个基类包里及其子包中的所有类。

当需要扫描多个包时,可以使用逗号分隔。

如果仅希望扫描特定的类而非基类包下的所有类,可以使用resource-pattern属性过滤特定的类。

示例:

  1. <context:include-filter>子节点标示要包含的目标类。
  2. <context:exclude-filter>子节点表示要排除在外的目标类。
  3. <context:componment-scan>下可以拥有多个<context:include-filter>子节点和<context:exclude-filter>。

二、代码实现

(1)基本实现

工程结构:

1

info.java继承了userrepository.java

实现了一个接口:

配置annotation_bean.xml:

以上做了什么?

  1. 在bean上加上了对应的注解。
  2. 配置<context:component-scan base-package=”annotation”></context:component-scan>。

当前这个包,还有这个包下面的子包,所有标示注解的那些bean,都将被ioc容器进行管理。

运行结果:

成功获得了所有的注解bean对象。

(2)可以用resource-pattern指定扫描的资源

修改annotation-bean.xml,指定范围:

这样就只有service包下的类可以实例化了。

也可以用<context:include-filter>子节点标示要包含的目标类。<context:exclude-filter>子节点表示要排除在外的目标类。

加入的是service这个包,但是不包含service这个注解类,那么userservice就无法实例化了。

运行结果:

如果把use-default-filters=”true”这个属性设为false:

就只有org.springframework.stereotype.Service这个包下的注解类service可以执行,其他都不能执行。

运行结果:

配置不能包含接口userrepository。

输出结果:

只有userrepository接口是不能实例化的。

三、总结

记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注