Spring 和EJB争吵终于即将结束:Spring将支持EJB3.1标准,Spring will also be a full featured EJB 3.1 implementation for use in the WebLogic application server.这场融合将在javaEE 6实现,这个融合和当初Hibernate与JPA融合一样水到渠成。
Spring创始人Rod Johnson 说Spring 2.5的dependency injection annotations是学习得益于EJB 3.0的 @Resource 和 Google’s Guice,我不知道他为什么没有提picocontainer,至少他的Spring 2.5开始直接大胆使用DI的auto wiring(而这个功能在Spring 1.X中还是可选功能),而2005年我的Jdon框架就完全是auto wiring。
Rod Johnson 鼓励开发者使用EJB标准,比如 @PostConstruct 和 @PreDestroy annotations,因为他们是标准化的,Spring已经支持他们(Spring才支持它们?今天才明白?),这些都意味着Spring和EJB争吵的结束。
其实EJB的@PostConstruct @PreDestroy @Resource 这样annotations都可以在EJB2中找到影子和原根,表现语法不一样,但是内部机制原理是一致的。所以,以前没有学过EJB的,看来还是要补这一课。
PostConstruct和PreDestroy都是在对象生命周期开始以及结束让程序员能够进行一些状态管理,比如开始一些场景准备和加载,或者结束后,释放一些资源,防止内存泄漏,这些都是从EJB1.X 无态Bean开始就有的功能,不过当初是使用XML配置,并且无论程序员实现与否,一定要写这几个方法,现在通过注解 annotation 加在你需要实现的方法上,更加简洁方便。
所以,我以前说:如果说EJB1/EJB2X是一个定型的女孩的话;那么EJB3引入IOC/DI依赖注射和annotation以后,就更漂亮,更加吸引程序员接近她,也非常容易和其打交道了。
EJB从开始诞生起,因为高低各种原因,被高端和低端各种人怀疑打击,真正是遭受了不公平待遇,
高端专家比如Martin Fowler因为其不宜测试,提出POJO思想,认为对象应该不依赖平台,应该是一个个光溜溜来去无牵挂的,不继承任何框架接口等。不可否认POJO促进了EJB3变得更漂亮,但是EJB内在分布式计算组件的重点没有变。
在低端程序员中,EJB以其深奥的原理和超前的设计思维,更不能被他们理解,他们甚至以一种僵化思维来看:现实80%不是大系统,不需要集群分布式计算。
[...]