Spring IN Action 笔记(一)

标签: 笔记

  1. Spring底层依赖于依赖注入(DI)和AOP(面向切面编程)
  2. Spring的使命:简化java开发
  3. 为了解决企业级应用开发的复杂性而创建的,使用就Spring可以让简单的javabean实现之前只有EJB才能完成的事情
  4. 激发pojo的潜能:很多框架通过强迫继承他们的类或者是实现他们的接口而导致应用与框架绑死(java本身就是单继承,如果因为框架的原因用掉了唯一的空位,会很被动)一个典型的例子:EJB2的无状态会话bean,这是一种侵入式编程方式,在早期的Struts,webWork,Tapestry以及无数的规范和框架中都能见到
  5. Spring竭力避免了因自身API而弄乱你的应用代码,也不会去强迫你继承或者实现他规范的东西,基本上在基于spring构建的应用中,他的类通常没有任何痕迹表明你使用了Spring
public class HelloWorldBean {

    public String sayHello(){

        return "Hello world";

    }

}

这是一个普通的pojo 没有任何地方证明他使用了spring

  1. Spring赋予pojo魔力的方式之一就是通过DI来装配他们,DI可以帮助应用对象之间保持松散耦合
  2. 在项目中应用DI,会使我们的代码变得异常简单并且更容易理解和测试
  3. 依赖注入会将所依赖的关系自动交给目标对象,而不是让对象自己去获取依赖
  4. 耦合具有两面性,紧密耦合的代码难以测试,难以复用,不好理解,而且会出现打地鼠式bug;但是一点耦合都没有的代码完全没有意义,为了完成有实际意义的功能,不同的类必须以适当的方式进行交互
  5. 通过DI,对象的依赖关系将有系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行创建或管理他们的依赖关系,如上图所示,依赖关系将被自动注入到需要他们的对象当中去。
  6. Spring共有三种注入方式(构造器注入等)
  7. 创建应用组件之间的协作的行为通常称为装配(wiring)。Spring有多种装配bean的方式,采用xml是很常见的一种装配方式。
  8. Spring通过应用上下文(Application Context)装载bean的定义并把它们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了多种应用上下文的实现,他们之间的主要区别仅仅在于如何加载配置。
  9. DI能够让相互协作的软件组件保持松散耦合,而面向切面编程允许你把遍布各处的功能分离出来形成可重用的组件
  10. 面向切面编程是一项促使系统关注点分离的技术,系统一般有多个模块组成,每个模块都有他们各自的业务功能,除了去实现自身的功能还要去承担一些额外的职责,譬如说:日志,事务管理,安全这类的系统服务经常融入到自身的具有核心业务逻辑的组件中,我们一般把这种系统服务称作横切关注点(因为他们会跨越系统的多个组件)
  11. 如果将这些关注点分散到各个模块中去,咱们的代码会受到双重的复杂性的影响:
  12. 实现系统功能的代码将会重复出现在多个组件中,这样的话必须要修改每个关注点的逻辑、必须要修改各个模块中的相关实现。即使你把这些关注点抽象为一个独立的模块、其他模块只调用他的方法,但方法的调用还是会重复的出现在各个模块中
  13. 组件会因为这些与自身业务无关的代码而变得混乱。一个购物车增加商品的方法应该只关心如何与增加这个商品,而不应该去考虑是不是安全或者是否需要支持事物
  14. 此图展示了这种不必要的复杂性,左边的业务与系统服务紧密结合。每个对象不光要知道他需要记日志,进行安全控制和参与事物,还要亲自执行这些服务
  15. 此图,利用AOP,系统范围内的关注点覆盖在它们所影响的组件之上
版权声明:本文为weixin_39384775原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39384775/article/details/96484767