【ssm】SpringIOC学习记录

这段时间趁着春节假期,把Spring的相关知识进行整理。长风破浪会有时,直挂云帆济沧海!加油!

一、Spring概述

  1. Spring 是一个开源框架.
  2. Spring 为简化企业级应用开发而生.
  3. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能.
  4. Spring 是一个 IOC(DI) 和 AOP 容器框架.
  5. Spring的特点有:轻量级、 依赖注入、面向切面编程、 容器、一站式

二、搭建Spring开发环境

所需jar包:

配置上下文:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd ">

</beans>

三、IOC容器及bean的配置

在 applicatonContext.xml 文件中通过 bean 节点来配置 bean.

Bean属性ID: 在 IOC 容器中必须是唯一的 若 id 没有指定,Spring 自动将定性类名作为 Bean 的名字  

Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.

Spring IOC 容器对 Bean 的生命周期进行管理的过程:

  • 通过构造器或工厂方法创建 Bean 实例
  • 为 Bean 的属性设置值和对其他 Bean 的引用
  • 调用 Bean 的初始化方法
  • Bean 可以使用了
  • 当容器关闭时, 调用 Bean 的销毁方法

在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法. 

Bean的作用域:在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域. 

四、注入依赖方式

--属性注入。

属性注入即通过 setter 方法注入Bean 的属性值或依赖的对象

属性注入使用 <property> 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 <value> 子节点指定属性值

--构造器注入。

通过构造方法注入Bean 的属性值或依赖的对象,它保证了 Bean 实例在实例化后就可以使用。

构造器注入在 <constructor-arg> 元素里声明属性。

构造器注入有两种方式:

①按索引匹配入参

②按类型匹配入参

--工厂方法注入(不使用)。

基本类型对象注入:

若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起来。

在 Bean 的配置文件中, 可以通过 <ref> 元素或 ref  属性为 Bean 的属性或构造器参数指定对 Bean 的引用.

 

在属性或构造器里声明的 Bean 称为内部 Bean.

注入集合:

配置 java.util.List 类型或者数组的属性, 需要指定 <list>  标签。

配置 java.util.Set 需要使用 <set> 标签。

Java.util.Map 通过 <map> 标签定义, <map> 标签里可以使用多个 <entry> 作为子标签. 每个条目包含一个键和一个值。

使用 <props> 定义 java.util.Properties, 该标签使用多个 <prop> 作为子标签。

util schema 及bean之间的关系:

使用 util schema 里的集合标签定义独立的集合 Bean,可以被公用。

Bean之间的关系: 

继承:

依赖:

前置依赖的 Bean 会在本 Bean 实例化之前创建好,如果前置依赖于多个 Bean,则可以通过逗号,空格或的方式配置 Bean 的名称

五、依赖注入—自动装配

语法

<bean id="..." class="..." autowire="byType"/>

autowire属性取值如下

  1. byType:按类型装配,可以根据属性的类型,在容器中寻找跟该类型匹配的bean。如果发现多个,那么将会抛出异常。如果没有找到,即属性值为null。
  2. byName:按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到,即属性值为null。
  3. constructor与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。 

自动装配缺点:

  1. 在 Bean 配置文件里设置 autowire 属性进行自动装配将会装配 Bean 的所有属性. 然而, 若只希望装配个别属性时, autowire 属性就不够灵活了.
  2. autowire 属性要么根据类型自动装配, 要么根据名称自动装配, 不能两者兼而有之.

在classpath自动扫描Bean组件:

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

  • @Component: 基本注解, 标识了一个受 Spring 管理的组件
  • @Respository: 标识持久层组件
  • @Service: 标识服务层(业务层)组件
  • @Controller: 标识表现层组件

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

六、使用 @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 的名称作为键值
发布了31 篇原创文章 · 获赞 6 · 访问量 4199

猜你喜欢

转载自blog.csdn.net/zhenliangit0918/article/details/104113430