Spring 入门:EJB vs Spring 容器大比拼

  1. EJB 缺点
    EJB 糟糕的代码和代码框架
    分布式模型滥用
    单元测试难以实现
    不要的复杂度导致性能降低
    容器的可移植性

  2. 重量级容器缺点
    带有侵入性的 API(代码依赖于 EJB)
    对容器的依赖 (代码不能再 EJB 容器之外工作)
    提供固定的一组机能,不具备配置能力
    不同的产品,部署过程不同,不易通用
    启动时间长

轻量级容器:
3. Spring 容器
负责 POJO 的生成和绑定关系

IoC 和 AOP
容器的功效由 IoC 完成
根据 Web 应用,小应用,桌面程序的不同,对容器的依赖程度不同
Spring 将管理的 Bean 作为 POJO 进行控制,通过 AOP Interceptor 能够增强其他功能

Spring 框架图

  1. Spring AOP
  2. Spring ORM
  3. Spring DAO
  4. Spring Web
  5. Spring Context
  6. Spring Web MVC
  7. Spring Core

IoC<–>DI 控制反转<–>依赖注入

整个应用程序的表现结果是由外部容器的 配置 来控制整个应用程序的运行效果
在系统运行时,由容器 (操作系统) 将依赖关系 (USB 外部设备) 注入到组件中

作用:

  1. 协调各组件间相互的依赖关系,同时大大提高了组件的可移植性
  2. 其实就是在调用 Service 是通过接口指向实现,把那个实现类写到了配置文件中,在程序运行的时候动态的通过配置文件来找到到底要实现那个接口实现类; 通过修改配置文件就可以实现组件的可扩展性 (修改配置文件中的实现类名)

Spring API
Bean 工厂
先读取配置文件
然后调用 getBean(),然后产生 Bean 对象

所有的容器负责创建 Bean 对象,负责销毁单例的 Bean,非单例的不负责销毁

在整个应用中,出了 DTO 对象,其他 bean 全部由 Spring 管理

spring 配置文件中的 id 属性和 name 属性的区别
id 属性只允许使用数字,字母,下划线和 $,而且数字不能开头;
name 属性可以随便
所有当需要其他特殊字符作为名字是必须使用 name

AOP

面向切面 (方向) 编程
通过动态代理实现
一个对象运行起来后,可以动态的添加执行代码 (属性,方法)
但是 java 只能在方法前后添加代码,因为 java 并不是完全的动态语言

IoC

用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转

DI

即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。