Spring 

Spring是一个开源的容器框架,可以管理Web层,业务层,Dao层,持久层组件,可以配置各个层的组件维护各层之间的关系。

主要负责创建Bean以及维护Bean之间的关系

Spring框架核心/核心原理

一、IOC:(Inversion of control): 控制反转

 概念:一个类在获取它所需要的依赖类的对象时,依赖对像创建的控制权由这个类转向容器,由Spring容器根据配置文件去提供实例。       

核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean 

 

理解: 一般一个类实现一个复杂的功能,需要依赖其他类或多个类协助才行。每个对象在需要获取依赖类对象的时候 需要使用像new object() 来获取,但是这样耦合度太高。 而IOC的思想是:Spring容器来实现这些相互依赖对象的创建、协调工作。对象只需要关系业务逻辑本身就可以了。从这方面来说,对象如何得到他的协作对象的责任被反转了(IOC、DI)。 其中类A中,可能就需要类B、类C中的方法。为了能调用别的类的方法,首先得取得这个类的实例,即在类A中new一个类B、再new一个类C,也就是说调用者负责创建被调用者的实例。试想想下面这两种情形: 1. 若类A中还需要其他很多类协助; 2. 类B、类C还需要协助很多其他类处理业务。 如此一来,会造成类A中越来越臃肿,越来越不好管理;类B、类C需要不断的创建。 而采用Spring框架后,就不用这么麻烦了。创建类A、类B、类C的实例以及维护类A和类B、类C之间关系的责任就交给了Spring,它负责这些工作。也就是说本来是类A控制这些实例的创建,现在交由Spring框架了,所以控制反转(IOC)了。

 

 

DI(Dependency Injection依赖注入),我的理解是,DI是IOC的实现方式。

     依赖注入的方式有三种:

             setter方法,

             构造器方法,

             注解AutoWired方式

 

二、AOP(Aspect-Oriented Programming): 面向方面编程 

在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

     程序在执行具体业务逻辑前、后,在不修改原有代码的情况下,加入一些扩展的功能,如:日志,事务等。实现了极大程度解耦、方便扩展。

       一般这些扩展的功能和具体的业务逻辑并没有直接的关系。将业务和非业务的分开,极大程度解耦。

理解: 在业务代码执行前后,在很多地方都需要加入这些额外的元素,但是这些方面和具体的业务逻辑并没有直接的关系。于是乎,就将这些额外的元素抽出来,加以封装, 在特定的位置横切到方法的业务逻辑前后等位置。将业务和非业务的分开,极大程度解耦。

 

a.静态代理

      根据每个具体类分别编写代理类

      根据一个接口编写一个代理类

b.动态代理

      针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类

 

附:

Spring框架包括7大模块(以下是为了内容完整引用部分)

深入解析spring架构与设计原理 spring框架的原理_AOP

 

◆核心容器:核心容器提供 Spring框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

◆Spring 上下文:Spring 上下文是一个配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

◆Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

◆Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

◆Spring ORM:Spring框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

◆Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

◆Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
 

参考:

    简洁:    

    (瞬间看明白IOC)

    详细:

    https://blog.51cto.com/13754022/2136801

    https://cloud.tencent.com/developer/article/1350651

 

  Spring架构和设计原理实现  

  https://www.iteye.com/blogs/subjects/Spring_jiwenke