spring知识四------基于注解的配置bean

Spring基于注解的配置中,首先我们应该知道首先加入aop的jar包,所有的关于注解的,都是基于这个jar包进行的,然后我们应该引入context命名空间,然后在配置文件中增加我们所需要的扫描的包。

组件扫描(component scanning): Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件。
四大特定组件
@Component: 基本注解, 标识了一个受 Spring 管理的组件
@Respository: 标识持久层组件
@Service: 标识服务层(业务层)组件
@Controller: 标识表现层组件
注意:spring没有严格定义这样的组件规定,但是一般给予mvc模型我们都这样进行设定。
注意:spring在扫描组件进行bean的初始化时,由于我们没有办法给其设置id值,而在spring注解中有默认的bean命名方式,就是使用类名,但是是将类名的额第一个字母小写的类名。【例如类UserService在初始化bean时则被默认为userService。】我们也可以通过注解中的 value 属性值标识组件的名称

配置项【context:component-scan】
【 base-package】 属性 指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子包中的所有类,当需要扫描多个包时, 可以使用逗号分隔。
【resource-pattern 】属性 过滤特定的类,扫描特定的类而非基包下的所有类。

【context:include-filter】子节点表示要包含的目标类。可以存在任意个。
【context:exclude-filter】子节点表示要排除在外的目标类。可以存在任意个。
【context:include-filter】 和【context:exclude-filter】子节点支持多种类型的过滤表达式:
这里写图片描述

<!-- 基本扫描  扫描com.wf.springannotation下所有的包和类中特定的组件,进行初始化bean -->
<context:component-scan base-package="com.wf.springannotation"></context:component-scan>

<!--resource-pattern 指定扫描的资源,仅扫描基包中repository包中的所有class  -->
    <context:component-scan base-package="com.wf.springannotation" resource-pattern="repository/*.class"> </context:component-scan> 

<context:component-scan base-package="com.wf.springannotation" use-default-filters="true">

    <!-- 指定排除那些指定的表达式的annotation组件,注意type属性 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>

    <!-- 只包含指定表达式的annotation组件 该子节点需要配合 父节点的 use-default-filters="false"进行使用,其余情况不用设置此属性-->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>

    <!-- 指定排除指定表达式的类或者接口以及接口的实现类 -->
<context:exclude-filter type="assignable" expression="com.wf.springannotation.repository.UserRepository"/> 

    <!-- 只包含指定的类或者接口以及接口的实现类 -->
<context:include-filter type="assignable" expression="com.wf.springannotation.repository.UserRepository"/> 
    </context:component-scan> 


@Autowired注解
@Autowired 注解自动装配具有兼容类型的单个 Bean属性。
1、构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired 注解(一般情况下,我们都将@Authwired配置在字段上面)。
2、所有使用 @Authwired 注解的属性都需要被设置为组件. 当 Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 若某一属性允许不被设置, 可以设置 @Authwired 注解的 required 属性为 false
3、当 IOC 容器里存在多个类型兼容的 Bean 时, 通过类型的自动装配将无法工作. 此时可以在 @Qualifier 注解里提供 Bean 的名称. Spring 允许对方法的入参标注 @Qualifiter 已指定注入 Bean 的名称(最典型的就是一个接口如果存在多个实现类,那么我们就可以利用这个属性指定装载的bean)。
4、@Authwired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配。
5、@Authwired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.【例如ArrayList[UserService] lists 此时将会装载所有的UserService的bean实例到lists集合中】。
6、@Authwired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值。

@Autowired与@Resource 或 @Inject
@Resource 注解要求提供一个 Bean 名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为 Bean 的名称。
@Inject 和 @Autowired 注解一样也是按类型匹配注入的 Bean, 但没有 reqired 属性。
建议使用 @Autowired 注解

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

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

  <import resource="classpath:beans-annotationrelation.xml"/>

这里写图片描述

源码可以在我的资源中查看 或者 github地址
https://github.com/wangfa1994/SpringLearning/tree/spring00401

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章