@
customer 对 Java EE 开发, Spring 真的没那么重要。
IOC , AOP 不是 Spring 发明的, 之前 PicoContainer 已经做很好,最初 Spring AOP 只是集成了 AOP alliance ,后来被一些 AspectJ 的追棒者强行加入 AspectJ 的支持, 让 Spring 支持不同 weaving 方式: runtime, loading, compile 。除默认的 RUNTIME 外,不知道有多少人用过 Loading 和 Compile time weaving ?
相比 CDI(概念来源于 JBoss Seam , Java EE 6 标准化了), TypeSafe 的注入方式 Spring 落后了好多年。而且不支持 Decorate , Alternative , Interceptor (相当 Spring AOP ,更简洁) 等模式, 虽然 Spring 4.x 加入了 meta annotation, 基于接口的带参数类型的 Generic Bean 的注入,但与 CDI 相比非常丑陋,直到 4.2 的 Event 才可以使用 POJO, 但依然没 CDI Event 那么优雅。
* [Generic type injection](
https://github.com/hantsy/spring4-sandbox/wiki/generic-type-injection)
* [Meta annotation](
https://github.com/hantsy/spring4-sandbox/wiki/meta-annotation)
[Spring 4.2 Event Sample](
https://github.com/hantsy/spring4-sandbox/blob/master/event)
除去 AOP 和 IOC ,在 Spring 中使用到 JSF , JPA , JMS , Bean Validation , JSR 330 (@Inject ) 等都是 Java EE 标准。 使用 CDI 和 EJB 3.x 代替掉 Spring , Java EE 标准一套显得更自然一些。
Spring 最初目标是代替 EJB 2 ,请记住 Spring 作者是在 J2ee development without EJB 一书的源代码基础上发展出 Spring 框架。
https://www.amazon.com/Expert-One-One-Development-without/dp/0764558315书名是 Without **EJB**,不是 Without J2EE/Java EE 。
EJB 2 写起来非常繁琐,但那是十几年的事。但 EJB 本身就是 IOC 思想, EJB 3.0 得益于 Java 5 Annotation 大大简化, 也变成 POJO 方式。
我从来不觉得 Java EE 和 Spring 是对立, Java EE 5 ( 2006 年,标准化了 Hibernate 加入了 JPA 1.0 , 简化的 EJB 3.0 ) 出来后,我也不觉得 Spring 再那么重要。