spring注解扫描

来源:互联网 发布:网络羽绒服品牌排行榜 编辑:程序博客网 时间:2024/05/17 00:53

在classpath中扫描Bean
组件扫描(component scanning): Spring能够从classpath下自动扫描,侦测和实例化具有特定注解(annotation)的Bean
特定注解包括:
* @Component:基本注解,标识了一个任何受spring管理的组件
* @Respository:标识持久层组件
* @Service:标识服务层(业务层)组件
* @Controller:标识表现层组件
当在组件类上使用特定的注解之后,还需要在Spring的配置文件中声明
* base-package属性指定一个需要扫描的基类包,spring容器将会扫描这个基类包里及其包中的所有类
* 当需要扫描多个包时,可以使用逗号分隔
* 如果仅希望扫描特定的类而非基包下的所有类,可以使用resource-pattern属性过滤特定的类,实例如下:

<!--    <context:include-filter>子节点表示要包含的目标类    <context:exclude-filter>子节点表示要排除在外的目标类--><context:component-scan base-package="com.et">    <context:include-filter type="annotation"expression="org.*.stereotype.Service"/>    <context:exclude-filter type="annotation"expression="com.et.bean.Address"/></context:component-scan>

组件装配
元素还会自动注册AutowiredAnnotationBeanPostProcessor 实例,该实例可以自动装配具有@Autowired 丶@Resource @Inject注解的属性
使用@Autowired自动装配Bean
@Autowired注解自动装配具有兼容类型的单个属性
* 构造器,普通字段(即使非 public),一切具有参数的方法都可以应用Autowired注解
* 默认情况下,所有使用@Autowired注解的属性都需要被设置,当spring找到不匹配的Bean装配属性时,会抛出异常。若某一属性不被设置,可以设置@Autowired的注解required属性为false。
* 默认情况下,当IOC容器里存在多个类型兼容的Bean时,通过类型的自动装配将无法工作,此时可以在@Qualifier注解里提供Bean的名称。Spring允许对方法的入参标注@Qualifiter已指定注入Bean的名称
* @Authwired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配.
* @Authwired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.
* @Authwired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值
使用 @Resource 或 @Inject 自动装配 Bean
* Spring 还支持 @Resource 和 @Inject 注解,这两个注解和 @Autowired 注解的功用类似
* @Resource 注解要求提供一个 Bean 名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为 Bean 的名称
* @Resource是JDK自带的注解,耦合度低
* @Inject 和 @Autowired 注解一样也是按类型匹配注入的 Bean, 但没有 reqired 属性

建议:一般情况使用 @Autowired

原创粉丝点击