Spring-2-Spring中的IoC控制反转

目录

1、基于 XML 的 DI

1.1 注入分类:setter方法注入+构造方法注入

1.2 注入分类:setter方法注入(掌握)

1.2.1 简单类型的setter方法注入

1.2.2 引用类型的setter方法注入

1.3 注入分类:构造方法注入(理解)

1.3.1 举例1:普通java对象的有参构造方法注入

1.3.2 举例2:java.io.File对象的有参构造方法注入

1.4 引用类型属性自动注入

1.4.1 引用类型属性:byName方式自动注入

1.4.2 引用类型属性:byType方式自动注入

1.5 为应用指定多个 Spring 配置文件

1.5.1 代码结构

1.5.2 在总的Spring配置文件中使用标签导入其他分配置文件-1

1.5.2 在总的Spring配置文件中使用标签导入其他分配置文件-2

1.5.3 测试

2、Spring总结,见博客最后

3、基于注解的 DI

3.0 spring.xml 配置文件示范

3.1 当项目中有多个包时, 指定多个扫描包的三种方式

3.1.1 方式1:使用多个 指定不同的包路径

3.1.2 方式2:使用分隔符指定 base-package 的值

3.1.3 方式3:base-package 是指定到父包名

3.2 定义 java Bean 的注解@Component  (掌握)  

3.2.1 同时需要在 spring.xml 文件中配置组件扫描器, 该组件扫描器会扫描被注解的类,同时创建对象

3.2.2 测试注解

3.3 Spring 还提供了另外3个创建对象的注解: @Repository/@Service/@Controller /@Component

3.4 简单类型属性注入 @Value (掌握)

3.5 引用类型属性注入-1: @Autowired是byType自动注入的(掌握)

3.6 引用类型属性注入-2: @Autowired与@Qualifier组合使用是byName自动注入的(掌握)

3.7 JDK注解 @Resource 自动注入 (掌握)

3.7.1 byType 注入引用类型属性

3.8 使用注解自动创建javaBean与 在XML文件中配置javaBean 的对比

3.8.1 使用注解自动创建javaBean的方式:bean对象的属性不经常改变的用xml方式

3.8.2 使用XML方式自动创建javaBean的方式:bean对象的属性经常改变的用xml方式

4、Spring总结-IOC

1、基于 XML 的 DI

1.1 注入分类:setter方法注入+构造方法注入

(1)bean 实例,Spring容器先通过调用无参构造器创建对象后,然后才对 bean 对象的属性进行初始化。

(2)初始化,是由Spring容器自动完成的,称为注入

(3)根据注入方式的不同,常用的有两类:setter方法 注入、构造方法注入

1.2 注入分类:setter方法注入(掌握)

set方法注入也叫设值注入,是指通过 setter 方法传入被调用者的实例。这种注入方式简单、直观,因而在 Spring 的依赖注入中大量使用。

1.2.1 简单类型的setter方法注入

  

1.2.2 引用类型的setter方法注入

当指定 bean 的某属性值为另一 bean 的实例时,通过 ref 指定它们间的引用关系,ref 的值必须为某 bean 的 id 值。

注意:对于其它 Bean 对象的引用,使用<bean/>标签的 ref 属性。

1.3 注入分类:构造方法注入(理解)

构造方法注入,是指Spring容器在构造调用者实例的同时,完成被调用者的实例化。即:使用java对象的有参构造器设置依赖关系。

1.3.1 举例1:普通java对象的有参构造方法注入

<constructor-arg />  标签中用于指定参数的属性有:

(1)name:指定参数名称。

(2)index:指明该参数对应着构造器的第几个参数,从 0 开始。不过,该属性不要也行,但要注意,若参数类型相同,或之间有包含关系,则需要保证赋值顺 序要与构造器中的参数顺序一致。

1.3.2 举例2:java.io.File对象的有参构造方法注入

使用构造注入创建一个系统类 File 对象。

1.4 引用类型属性自动注入

(1)对于引用类型属性的注入,也可不在配置文件中显示的注入,可以通过为 <bean/> 标签设置 autowire 属性值,为引用类型属性进行隐式自动注入(默认是不自动注入引用类型属性)。

(2)根据自动注入判断标准的不同,可以分为两种:autowire = byName:根据bean的名称自动注入。autowire = byType:根据bean的类型自动注入。

1.4.1 引用类型属性:byName方式自动注入

当配置文件中被调用者 bean 的 id 值与代码中调用者 bean 类的引用类型的属性名相同时,可使用 byName 方式,让容器自动将被调用者 bean 注入给调用者 bean。

容器是通过调用者的 bean 类的属性名与配置文件的被调用者 bean 的 id 进行比较而实现自动注入的。

1.4.2 引用类型属性:byType方式自动注入

使用 byType 方式自动注入,要求:配置文件中被调用者 bean 的 class 属性指定的类,要与代码中调用者 bean 类的某引用类型属性类型同源:即 要么相同,要么有 is-a 关系(子类或是实现类)。

注:但这样的同源的被调用 bean 只能有一个,多于一个,容器就不知该匹配哪一个了。

1.5 为应用指定多个 Spring 配置文件

在实际应用里,随着应用规模的增加,系统中 Bean 数量也大量增加,导致配置文件变得非常庞大、臃肿。为了避免这种情况的产生,提高配置文件的可读性与可维护性,可以将 Spring 配置文件分解成多个配置文件。包含关系的配置文件:多个配置文件中有一个总文件,总配置文件将各其它子文件通过 <import /> 引入。

在 Java 代码中只需要使用总配置文件对Spring容器进行初始化即可。


举例:

1.5.1 代码结构

1.5.2 在总的Spring配置文件中使用<import/>标签导入其他分配置文件-1

1.5.2 在总的Spring配置文件中使用<import/>标签导入其他分配置文件-2

注意:也可使用通配符 * 来标识匹配任意字符。但是,此时要求父配置文件名不能满足 * 所能匹配的格式,否则将出现循环递归包含。

就本例而言,父配置文件不能匹配 spring- *.xml 的格式,也即 不能起名为 spring-total.xml。

1.5.3 测试

2、Spring总结,见博客最后

3、基于注解的 DI

对于 DI 使用注解,将不再需要在 Spring 配置文件中声明 bean 实例。 Spring 中使用注解,需要在原有 Spring 运行环境基础上再做一些改变。

需要在 Spring 配置文件中配置组件扫描器 <context:component-scan base-package=" "/>,用于在指定的基本包中扫描注解。

3.0 spring.xml 配置文件示范

3.1 当项目中有多个包时, 指定多个扫描包的三种方式

3.1.1 方式1:使用多个 <context:component-scan base-package=" " /> 指定不同的包路径

3.1.2 方式2:使用分隔符指定 base-package 的值

分隔符可以使用逗号(,)、分号( ; )、还可以使用 空格,不建议使用空格。

3.1.3 方式3:base-package 是指定到父包名

base-package 的值表是基本包,容器启动会扫描包及其子包中的注解,当然也会扫描到子包下级的子包。所以 base-package 可以指定一个父包就可以。

但不建议使用顶级的父包,扫描的路径比较多,导致容器启动时间变慢。指定到目标包和合适的,也就是注解所在包全路径。例如注解的类在 com.bjpowernode.beans 包中。

3.2 定义 java Bean 的注解@Component  (掌握)  

需要在类上使用注解 @Component,该注解的 value 属性用于指定该 bean 的 id 值。

3.2.1 同时需要在 spring.xml 文件中配置组件扫描器, 该组件扫描器会扫描被注解的类,同时创建对象

   

3.2.2 测试注解

3.3 Spring 还提供了另外3个创建对象的注解: @Repository/@Service/@Controller /@Component

另外,Spring 还提供了 3 个创建对象的注解:

(1)@Repository :用于对 DAO 实现类进行注解。

(2)@Service:用于对 Service 实现类进行注解。

(3)@Controller:用于对 Controller 实现类进行注解。

这三个注解与 @Component 都可以创建对象,但这三个注解还有其他的含义:

@Service 创建业务层对象,业务层对象可以加入事务功能, @Controller 注解创建的对象可以作为处理器接收用户的请求。

@Repository,@Service,@Controller 是对@Component 注解的细化,标注不同层的对象,即持久层对象,业务层对象,控制层对象。

@Component 不指定 value 属性,bean 的 id 是类名的首字母小写。

3.4 简单类型属性注入 @Value (掌握)

需要在属性上使用注解 @Value,该注解的 value 属性用于指定要注的值。使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter, 则也可将其加到 setter 上。

举例:

3.5 引用类型属性注入-1: @Autowired是byType自动注入的(掌握)

需要在引用属性上使用注解 @Autowired,该注解默认使用 按类型自动装配 Bean 的方式使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter, 则也可将其加到 setter 上。

举例:

3.6 引用类型属性注入-2: @Autowired与@Qualifier组合使用是byName自动注入的(掌握)

需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。类中无需 set 方法,也可加到 set 方法上。

举例:

@Autowired 还有一个属性 required,默认值为 true,表示当匹配失败后,会终止程序运行。若将其值设置为 false,则匹配失败,将被忽略,未匹配的属性值为 null。

3.7 JDK注解 @Resource 自动注入 (掌握)

Spring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名称byName匹配 Bean,也可以按类型byType匹配 Bean,

默认是按名称byName注入,按名称不能注入 bean,则会按照类型byType的方式进行 Bean 的匹配注入。

使用该注解,要求 JDK 必须是 6 及以上版本。@Resource 可在属性上,也可在 set 方法上。

3.7.1 byType 注入引用类型属性

@Resource 注解若不带任何参数,默认采用按名称byName的方式注入,按名称不能注入 bean,则会按照类型byType的方式进行 Bean 的匹配注入。

举例:

3.8 使用注解自动创建javaBean与 在XML文件中配置javaBean 的对比

3.8.1 使用注解自动创建javaBean的方式:bean对象的属性不经常改变的用xml方式

优点是:方便;直观;高效(代码少,没有配置文件的书写那么复杂)。

弊端:以硬编码的方式写入到 Java 代码中,具有代码侵入性,修改是需要重新编译代码的。

3.8.2 使用XML方式自动创建javaBean的方式:bean对象的属性经常改变的用xml方式

优点是:配置和代码是分离的;在 xml 中做修改,无需编译代码,只需重启服务器即可将新的配置加载。

缺点是:编写麻烦,效率低,大型项目过于复杂。

4、Spring总结-IOC

猜你喜欢

转载自blog.csdn.net/cmm0401/article/details/112257139
今日推荐