1.SpringIOC与依赖注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.SpringIOC与依赖注入相关的知识,希望对你有一定的参考价值。


  1. Spring概述

Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

1.Spring、IOC与依赖注入_xml

通过Spring提供的IoC容器(本质就是一个map,key是字符串,值是对象),可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

AOP编程的支持

通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

  1. IOC的概念

划分模块的一个准则就是高内聚低耦合。

程序间的依赖关系。

独立性很差,可重用度不高。

2.1工厂式解耦

1.Spring、IOC与依赖注入_spring_02

1.Spring、IOC与依赖注入_解耦_03

1.Spring、IOC与依赖注入_xml_04

以上这种方式创建对象会产生耦合,在开发过程中,减少使用这种开发模式。

第一步:先把创建的xml反射替代出来new对象,用反射去创建,然后把发射对象剥离到一个配置文件中。

第二步:然后去用BeanFactory去控制这个文件配置。

到了第二步,这种方式就是工厂式解耦。

1.Spring、IOC与依赖注入_解耦_05

由原来的主动索要资源,到现在的被动的给资源。工厂生产什么,它就接收什么,在这个过程中有可能会产生不能匹配的文件。

当然在创建的工厂IOC容器中有两个读取配置的两个对象:一个是Properties另一个是ResourceBundle

ResourceBundle.getBudle(); a.这个对象只能取值不能赋值;

b.只能读取properties配置文件(是因为没有添加扩展名的机会),所以别的不行。

C. 它只能读取类路径下的properties文件,别的地方不行。

但是它还有一个细节就是如下全限定类名和绝对路径的区别

1.Spring、IOC与依赖注入_spring_06

工厂式解耦原理:

1.Spring、IOC与依赖注入_解耦_07

1.Spring、IOC与依赖注入_spring_08

1.Spring、IOC与依赖注入_xml_09

2.2控制反转-Inversion of Control

它的主要目的就是解耦。

在service中不可能有可变的方法??

想创建一个对象,只有把工厂对象放外边,放里边会产生多个对象。以下就是spring中ioc的原理:

1.Spring、IOC与依赖注入_spring_10

  1. 使用spring的ioc

注意:准备spring的jar包(5以上就行)

导入约束xmlns

1.Spring、IOC与依赖注入_xml_11

1.Spring、IOC与依赖注入_xml_12

1.Spring、IOC与依赖注入_xml_13

左图就是用到spring IOC的话,需要配置的三个文件。

  1. spring的分析

以下是获取的容器中对象的方法:

1.Spring、IOC与依赖注入_解耦_14

 

1.Spring、IOC与依赖注入_xml_15

BeanFactory和ApplicationContext的区别:

1.Spring、IOC与依赖注入_xml_16

Spring 中bean对象的细节--以下是关于bean.xml中的分析:

  1. 创建bean对象的三种方式:
  2. 1.Spring、IOC与依赖注入_spring_17

 

  1.  Bean对象作用范围改变

1.Spring、IOC与依赖注入_xml_18

  1. Bean对象得生命周期

1.Spring、IOC与依赖注入_xml_19

1.Spring、IOC与依赖注入_xml_20

  1. 配置对象:把对象的创建交给spring来管理:依赖注入

什么是依赖注入?就是把当前所需要的对象传进来就是依赖注入。

1.Spring、IOC与依赖注入_解耦_21

1.Spring、IOC与依赖注入_spring_22

如下代码所示:

1.Spring、IOC与依赖注入_spring_22

1.Spring、IOC与依赖注入_解耦_24

复杂类型注入

 

1.Spring、IOC与依赖注入_spring_25

1.Spring、IOC与依赖注入_spring_26

补充:

@Service是一个注解啊,告诉spring创建一个实现类的实例啊。。。
就是不用再spring里配置bean,就是因为这个@Service

@Repository用于标注数据访问组件,即DAO组件;

在一个稍大的项目中,如果组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 

 

以上是关于1.SpringIOC与依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

Spring-IOC源码解读1-整体设计

节,提供大致目录如下,各位期待新书吗?

Spring IOC

依赖注入总结

Spring 框架中 Setter 注入 和 构造器注入 方式的区别 与优劣

Spring依赖注入的方式