加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

上热门的Python开源项目

发布时间:2021-01-31 09:52:25 所属栏目:动态 来源:互联网
导读:Spring Core:Spring核心,它是框架最基础的部分,提供IOC和依赖注入DI特性。 Spring Context:Spring上下文容器,它是 BeanFactory 功能加强的一个子接口。 Spring Web:它提供Web应用开发的支持。 Spring MVC:它针对Web应用中MVC思想的实现。 Spring DAO
  1. Spring Core:Spring核心,它是框架最基础的部分,提供IOC和依赖注入DI特性。
  2. Spring Context:Spring上下文容器,它是 BeanFactory 功能加强的一个子接口。
  3. Spring Web:它提供Web应用开发的支持。
  4. Spring MVC:它针对Web应用中MVC思想的实现。
  5. Spring DAO:提供对JDBC抽象层,简化了JDBC编码,同时,编码更具有健壮性。
  6. Spring ORM:它支持用于流行的ORM框架的整合,比如:Spring + Hibernate、Spring + iBatis、Spring + JDO的整合等。
  7. Spring AOP:即面向切面编程,它提供了与AOP联盟兼容的编程实现。

2 IOC 跟 AOP

提到Spring永远离不开的两个话题就是 IOC跟AOP,这是Spring的两大核心知识点,初学者不要被IOC、AOP、Aspect、Pointcut、Advisor这些术语吓着了,这些术语都是无聊的人为了发论文硬造的。

2.1 IOC

Java是个面向对象的编程语言,一般一个应用程序是由一组对象通过相互协作开发出的业务逻辑组成的,那么如何管理这些对象呢?抽象工厂、工厂方法设计模式可以帮我们创建对象,生成器模式帮我们处理对象间的依赖关系,可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担。如果程序在对象需要的时候,就能自动管理对象的声明周期,不用我们自己再去管理Bean的声明周期了,这样不就实现解耦了么。

Spring提出了一种思想:由Spring来负责控制对象的生命周期和对象间的关系。所有的类都会在Spring容器中登记,告诉Spring这这个类是什么,需要什么,然后Spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的Bean。所有的类的创建、销毁都由Spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是Spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转(Inversion of Controller),也可以叫依赖注入 DI(Dependency Injection)。

知道大致思想后其实可以如果尝试 自己实现IOC 的话就会发现核心就是 反射 + XML解析/注解解析 。

读取 XML 获取 bean 相关信息,类信息、属性值信息。

通过反射机制获取到目标类的构造函数,调用构造函数,再给对象赋值。

如果想自己跟下源码你会发现IOC的源码入口是refresh(),里面包含13个提供不同功能的函数,具体流程较复杂,公众号回复 IOC 获得原图。

2.2 Context

IOC 容器只是提供一个管理对象的空间而已,如何向容器中放入我们需要容器代为管理的对象呢?这就涉及到Spring的应用上下文Context。

应用上下文Context :

基于 Core 和 Beans,提供了大量的扩展,包括国际化操作(基于 JDK )、资源加载(基于 JDK properties)、数据校验(Spring 自己封装的数据校验机制)、数据绑定(Spring 特有,HTTP 请求中的参数直接映射称 POJO)、类型转换,ApplicationContext 接口是 Context 的核心,可以理解为Bean的上下文或背景信息。
 

3.2 控制层

控制层是面向管理员的操作平台。

这一层主要面向运维视角,实现对引擎层的监控、启停、扩容等能力。

对比交互层产品模块,这一层次的控制台会有更复杂的任务控制选项,同时,也会具备很多运维层面的操作,比如引擎层的服务器管理能力等。

Canal、otter等开源产品都已经自带了相关控制台,可以直接使用。

(编辑:江门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!