组件扫描

组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解(annotation)的Bean。

特定注解包括:

@Component:基本注解,标识一个受Spring管理的组件

@Respository:标识持久层组件

@Service:标识服务层(业务层)组件

@Controller:标识表现层组件

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


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

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

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

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

实例:

<context:component-scan base-package="cn">
     	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
  	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
  </context:component-scan>

<context:include-filter> 子节点表示要包含的目标类

<context:exclude-filter> 子节点表示要排除在外的目标类


在classpath扫描组件

<context:include-filter>和<context:exclude-filter>子节点支持多种类型的过滤表达式:

annotation:表示排除某些带有指定注解的类

assinable:排除指定的类

组件装配

<context:component-scan>元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource、@Inject注解的属性

使用@Autowired自动装配Bean

@Autowired注解自动装配具有兼容类型的单个Bean属性

构造器,普通字段(即使是非public),一切具有参数的方法都可以应用@Authwired注解

默认情况下,所有使用@Authwired注解的属性都需要被设置,当Spring找不到匹配的Bean装配属性时,会抛出异常,若某一属性允许不被设置,可以设置@Authwired的注解的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注解


整合多个配置文件

Spring允许通过<import>将多个配置文件引入到一个文件中,进行配置文件的集成。这样在启动Spring容器时,仅需要指定这个合并好的配置文件就可以。

import元素的resource属性支持Spring的标准的路径资源


<import resource="classpath:applicationcontext-factory.xml"/>



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值