spring学习之路(一)
什么是spring
spring是一个用于简化企业级 Java 开发,促进代码的松散耦合的开发框架, 而spring简化开发和降低耦合的主要方式就是依赖注入DI和面向切面编程AOP。 这两个概念也困扰了我很久,后来读了《spring实战》才算理解。
DI 负责让相互协作的软件组件保持松散耦合,而AOP负责把遍布应用各处的功能分离出来形成可重用的组件。
Spring 的核心是一个 容器,通常称为 Spring 应用程序上下文,用于创建和管理应用程序组件。这些组件(或 bean)在 Spring 应用程序上下文中连接在一起以构成一个完整的应用程序。
而将 bean 连接在一起的行为是基于一种称为 依赖注入的模式。依赖项注入的应用程序不是由组件自身创建和维护它们依赖的其他 bean 的生命周期,而是依赖于单独的实体(容器)来创建和维护所有组件,并将这些组件注入需要它们的 bean。通常通过构造函数参数或属性访问器方法完成此操作。
依赖注入
任何一个有实际意义的应用(肯定比 Hello World 示例更复杂)都会由两个或者更多的类组成,这些类相互之间进行协作来完成特定的业务逻辑。
按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码。
通过 DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理它们的依赖关系
依赖注入就是一种组装应用对象的的方式,借助这种方式对象无需知道依赖来自何处或者依赖的实现方式。不同于自己获取依赖对象,对象会在运行期赋予它们所依赖的对象。依赖对象通常会通过接口了解所注入的对象,这样的话就能确保低耦合。
这就是一个构造器注入的典型案例,左图中的代码中严格限制了quest的用途,这是一个救援少女的行动,其他的事务无法处理。右图没有自己维护一位专门救援少女的冒险,而是是将Quest作为构造器参数传入,而Quest只是一个接口,他可以充当很多事情,可以救援少女,也可以打败恶龙,拯救世界。传输进去什么参数,就可以执行什么任务。
应用切面
系统由许多不同的组件组成,每一个组件各负责一块特定功能。除了实现自身核心的功能之外,这些组件还经常承担着额外的职责。诸如日志、事务管理和安全这样的系统服务经常融入到自身具有核心业务逻辑的组件中去,这些系统服务通常被称为横切关注点,因为它们会跨越系统的多个组件。比如:
每一项服务不仅要负责自己的核心业务,还要实现记日志和进行安全控制等功能。
AOP 能够使这些服务模块化,并以声明的方式应用到需要的组件中去。所造成的结果就是这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不需要了解涉及系统服务所带来复杂性。
到这里简单引入了,什么是依赖注入和面向切面编程。具体讲解会在后面的笔记中整理。
学习计算机以来,遇到过无数难关,大都是凭借各位大佬的技术博客和经验分享解决的。十分感谢大佬们的分享,希望我的笔记也能帮助到其他同行者。