Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。 —— 百度百科
对Spring的理解
对Spring 这个词的理解/对Spring框架的理解
Spring 可以是Spring公司,也可以说是Spring框架,一般开发人员口头上说的Spring指的就是Spring框架,即Spring Framework
Spring框架包含有很多内容,主要由7个部分组成:
Spring Core |
|
---|---|
Spring AOP |
|
Spring ORM |
|
Spring DAO |
|
Spring Context |
|
Spring Web |
|
Spring Web MVC |
这些都是Spring框架中具体的内容,这些具体的内容都是设计思想的产物,如Spring核心思想IoC、面向切面编程、ORM设计思想、DAO设计思想、MVC设计思想、、、
在写代码实现业务逻辑时,你最好是先有项目的架构思想、思想落地(设计产物)后才开始你的代码(产品)/
对Spring IoC的理解
IoC - Inversion of Control - 控制反转 | DI - Dependency Injection - 依赖注入
- IoC是一种设计思想
Spring中IoC思想描述
即控制反转思想的描述,先决条件是A类依赖B类(A控制其内部B类实例的生成),现在通过一个管理者(Spring容器)管理一个(或多个)B类实例,A类中包含的B类实例的产生不在由A类直接控制,而是通过管理者。
IoC思想的目的:解耦
- Spring中的IoC实施方案 - Spring Bean\Spring Bean容器\Bean的注入
- IoC和DI是什么关系呢?由于控制反转概念比较含糊,不好理解和描述,所以2004年大师级人物Martin Fowler又给出了一个新的名字
对Spring 容器及Spring 上下文的理解
Spring容器是Spring的核心,从代码层面,Spring容器其实就是所有实现了ApplicationContext接口的类的实例的总称(我们也常把上下文说成是容器)
org.springframework.context.ApplicationContext接口(Spring 应用上下文接口)用于完成容器的配置,初始化,管理bean
Spring容器的类型
容器并不唯一,Spring容器大概分为两种类型:一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;还有一种就是继承了BeanFactory后派生而来的应用上下文,其抽象接口也就是我们上面提到的的ApplicationContext,它能提供更多企业级的服务,例如解析配置文本信息等等,这也是应用上下文实例对象最常见的应用场景
BeanFactory
接口BeanFactory(org.springframework.beans.BeanFactory),其职责是:处理Bean的初始化,定位,配置应用程序中的对象以及建立这些对象的依赖。Bean对象的依赖是通过元数据来描述。通过BeanFactoryAware类实现。比较常用的子接口为XMLBeanFactory。
ApplicationContext
接口ApplicationContext来自于org.springframework.context.ApplicationContext,继承BeanFactory,除了支持BeanFactory的功能外,还能支持企业应用的其它功能,如:事务管理,国际化支持,以及AOP集成等等。通过类ApplicationContextAware类实现。比较常用的子接口为:AbstactApplicationContext。
Spring容器的初始化过程(Bean的生成过程)
所有bean的实例化,获取,销毁等都是由Spring容器完成的。
对Spring Bean的理解
对于开发者来说,开发者使用Spring框架主要是做两件事:①开发Bean;②配置Bean(管理交给容器做了),注入Bean
Bean 生命周期
Bean 作用域
singleton | 单例模式。默认。在整个Spring IoC容器中,singleton作用域的Bean将只生成一个实例 |
---|---|
prototype | 原型模式。每次通过容器的getBean()方法获取prototype作用域的Bean时,都将产生一个新的Bean实例 |
request | 对于一次HTTP请求,request作用域的Bean将只生成一个实例,这意味着,在同一次HTTP请求内,程序每次请求该Bean,得到的总是同一个实例。只有在Web应用中使用Spring时,该作用域才真正有效 |
session | 该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效 |
global session | 每个全局的HTTP Session对应一个Bean实例。在典型的情况下,仅在使用portlet context的时候有效,同样只在Web应用中有效 |
Bean Spring 配置文件
Bean 创建方式
构造器实例化
静态工厂实例化
动态工厂实例化
Bean 注入方式
构造器注入
set方法注入
静态工厂衍生注入
实例工厂衍生注入
注解衍生注入
对Spring AOP的理解
AOP - Aspect Oriented Programming - 面向切面编程
面向过程 -> 面向切面
相关专业概念
Aspect(切面) | Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice |
---|---|
Joint point(连接点) | 表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point |
Pointcut(切点) | 表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方 |
Advice(通知增强) | Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码 |
Target Object(目标对象) | 织入 Advice 的目标对象 |
AOP 动态代理 | 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理 |
Weaving(织入) | 将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程 |
作用
代码分离:将具体业务代码和业务无关代码分离开,解耦、减少代码重复开发工作、代码更加清晰、提高可维护性
AOP原理
实现AOP的技术,主要分为两大类:
AOP与注解
对Spring MVC的理解
参考:
- Spring Framework https://spring.io/projects/spring-framework
- 技术博客-Spring容器 https://blog.csdn.net/lqzxpp/article/details/87068003
- 技术博客-Spring容器 https://blog.csdn.net/szwandcj/article/details/50762990
- 技术博客-Spring容器 https://blog.csdn.net/u014199143/article/details/80692127
- 技术博客-Spring容器 https://blog.csdn.net/qq_39632561/article/details/83070140
- 技术博客-Spring Bean https://www.cnblogs.com/zrtqsk/p/3735273.html
- 技术博客-Spring Bean实例化 https://www.cnblogs.com/caoyc/p/5624697.html
- 技术博客-Spring Bean注入方式 https://www.cnblogs.com/tuyang1129/p/12873492.html
爬虫:如何找到引用某个网站的所有网站的地址?