一、Spring简介

1.Spring简化Java开发

Spring Framework是一个应用框架,框架一般是半成品,我们在框架的基础上可以不用每个项目自己实现架构、基础设施和常用功能性组件,而是可以专注业务逻辑。因此学习Spring Framework在架构和模式方面的结构和原理,对我们在架构和模块级别的理解帮助极大。Spring Framework(参考1)的宗旨是简化Java开发,主要的手段如下:

(1)在架构上解耦:通过DI(依赖注入)管理类型依赖,通过AOP分离关注点,减少重复代码。

(2)在设计上广泛采用DIP(依赖倒置)和ISP(接口隔离)等原则和Facade(外观)等模式:提供简化的调用接口并封装了众多出色的第三方组件。

(3)在语言层面上采用注解:通过配置文件和Annotation(参考.NET Attribute)简化应用配置。

2.Spring Framework的架构和模块:

Spring Framework本身的架构是典型的松散分层,外层可以按需引用全部内层,内层不能引用外层。Spring的基础组件如下图所示:

从图中可以看出,开始的模块只有从core\beans\aop\context四个组件,后来添加了context-support【1.2】扩展模块、expression【3.0】扩展模块和beans-groovy【4.0】扩展模块。

Spring上述模块的基础上,内建和封装了众多的实用的通用组件,主要的组件如图所示:

从图中可以看出,spring-oxm、spring-jdbc和spring-web是众多模块依赖的核心,spring-oxm提供了Object和XML的映射支持。

二、基础知识

1.DIP:DIP(依赖倒置原则)是DI(依赖注入)的核心(参考2)。

(1)高层模块不应该依赖于低层模块。两者都应该依赖于抽象。

(2)抽象不应该依赖于细节。细节应该依赖于抽象。

说人话就是:将对具体类的引用转换成对其接口的引用,具体类只引用接口(引用==依赖,接口==接口或抽象类)。事实上我们调用具体类的时候在头脑里也是只关心其提供的API而非实现,DIP则通过在设计和重构阶段在技术手段上保证了解耦。

2.DI:DI(依赖注入)让我们不必手写工厂代码来管理接口和实现类的映射、对象的创建和生命周期的管理。

(1)接口注入:必须实现特定的接口才可以,侵入性太强,现在已经无人关心和使用。

(2)构造函数注入:依赖体现在构造函数的参数上。

(3)属性注入:依赖体现在属性上。

由于在实现时,可以将类型注册为自己的兼容类型,这样依赖注入就可以直接替代new实例化对象,这样理解和使用依赖注入工具还不如不使用或手写工厂了。依赖注入工具在实现时肯定会实现成一个支持不同配置和不同生命周期的对象工厂,但即使没有提供一套添加依赖倒置原则限制的API,也不意味着我们把它当成new的替代品。如同映射工具虽然在实现时可以任意映射,但不是用来取代赋值的,而是用来处理领域实体和视图模型等有实际对应关系的对象之间的映射。

(1)依赖配置:依赖配置是依赖注入实现的基础。依赖注入工具都至少支持代码配置和文件配置。Java中可以通过Annotation(.NET中通过Attribute)简化配置。

(2)对象工厂:根据配置返回一个或多个对象。这是核心功能。

(3)生命周期管理:一般提供至少4种级别的支持:作用域、单例、线程、HTTP请求范围。

大多数依赖注入工具在支持依赖倒置原则的基础上,在技术手段上实现了更多的功能,如类型的兼容转换、对依赖命名、在配置时直接传入对象等。

三、Spring依赖注入的要点

Bean在Spring中就是POJO(.NET的POCO)。

Spring依赖注入需要掌握的核心是3个类型BeanDefinition、BeanFactory和ApplicationContext。

1.BeanFactory

BeanFactory是spring中依赖注入的核心接口,其设计主要采用了ISP(接口隔离原则),通过多层次的接口继承即保证了单个接口的内聚又保证了整个体系的简洁。这里我们要关注的核心是DefaultListableBeanFactory。

如图所示,查看XmlBeanFactory代码,可以看到XmlBeanFactory只是通过XmlBeanDefinitionReader载入了BeanDefinition配置,XmlBeanDefinitionReader负责将配置解析到BeanDefinition。DefaultListableBeanFactory是真正的实现类,其中定义了类型为Map

java接口注入对象的意义_Java Web系列:Spring依赖注入基础相关推荐

  1. java接口的作用和意义_java什么是接口?接口有什么作用?接口如何使用?

    1.在Java中接口是一种特殊的抽象类.跟一般的抽象类相比,接口里面的所有方法都是抽象方法,接口口里面的所有属性都是常量.也就是说,接口里面只有方法定义而没有任何方法实现.上面所说的是接口的概念. 2 ...

  2. java接口的作用和意义_Java接口的作用与意义

    接口 1.接口的特点 首先看下面的这个抽象类代码: 抽象类代码中变量全为常量,方法全是抽象方法,这样的形式,我们可以将它们定义为接口类,书写方式如下: 接口的语法为: interface接口名{ 常量 ...

  3. java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码

    java相关:Spring Boot如何动态创建Bean示例代码 发布于 2020-3-20| 复制链接 摘记: 前言本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来 ...

  4. arg是什么函数_java后端开发三年!你还不了解Spring 依赖注入,凭什么给你涨薪...

    前言 前两天和一个同学吃饭的时候同学跟我说了一件事,说他公司有个做了两年的人向他提出要涨薪资,他就顺口问了一个问题关于spring依赖注入的,那个要求涨薪的同学居然被问懵了...事后回家想了想这一块确 ...

  5. Java程序员进阶——Spring依赖注入原理分析

    Spring依赖注入原理分析 下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A public class A{public v ...

  6. 使用Spring.Net对Web页面进行依赖注入

    今天看到这篇文章 Unity&WebForm(1): 自定义IHttpHandlerFactory使用Unity对ASP.NET Webform页面进行依赖注入,这是一个很好的思路,自定义IH ...

  7. Spring依赖注入的接口为null

    昨天碰到一个问题,做大量Excel导入时,Spring依赖注入接口总是null. 因为之前使用的时候都是可以的,所以我就各种尝试,我的类进行实现接口,进行组件定义等等都不行.今早重新看看依赖注入的定义 ...

  8. Spring学习3—控制反转(IOC)Spring依赖注入(DI)和控制反转(IOC)

    一.思想理解    Spring 能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调.运 ...

  9. spring依赖注入三种方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入. 依赖注入是指:让调用类对某一接口的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Spring容器中 ...

最新文章

  1. Python零基础自学会有哪些弊端
  2. 新制造 新工科 新机制——李泽湘教授在工程教育高峰论坛上的报告
  3. 【Android应用开发】RecycleView API 翻译 (文档翻译)
  4. 基于hi-nginx的web开发(python篇)——utf-8编码
  5. 专科 java转go 翱翔之路(一)基础语法:变量声明,匿名函数,结构体,函数,map
  6. Oracle GoldenGate经典架构
  7. 基于php的医院管理,基于PHP的医院管理信息系统的设计与实现
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的少儿网站教育管理系统
  9. 【JavaScript】查漏补缺 —对象转换成字符串JSON.stringify()
  10. 第一天docker入门
  11. alwayson10-创建alwayson高可用性组侦听器
  12. 计算机风扇维修,电脑风扇轴承磨损的简易维修方法
  13. 计算机实训报告英语,英文计算机实习证明格式
  14. java docx4j 使用教程_docx4j深入学习整理
  15. codevs2822 爱在心中(tarjan求缩点的度)
  16. HTML的表单及框架
  17. 微信小程序实现腾讯地图定位功能-demo
  18. 【51单片机】霹雳灯实验代码
  19. SSL在线生成地址惠存
  20. SWAN测试用例af-alg/rw-cert

热门文章

  1. 北京44岁程序员失业,感叹:编程估计没戏了,想去卖煎饼果子
  2. 华为提出十大数学挑战!解出一个就是年薪百万!
  3. 小团队 vs 大团队
  4. Dubbo 管理能力弱?Dubbo Admin 发布 v0.1 助力服务管理能力!
  5. html代码复制到asp中不一样了_迷你代码编程在线成语词典
  6. beamer插入图片_beamer中暗背景插入图片
  7. android adb恢复出厂设置,android开发分享擦除数据/通过ADB恢复出厂设置
  8. mxnet pick挑选
  9. python 遍历删除
  10. gradle build running很慢