技术开发 频道

Spring VS EJB 3 的若干认识误区

二、  Spring的XML VS EJB的注释

 
从应用开发者的角度来看,Spring的编程接口主要基于XML配置文件,而EJB 3.0则大量的使用了JAVA注解。XML文件可以表达复杂的关系,但是它们更加冗长而且不健壮。注解的方式很简单明了,但是很难去表达复杂的或者继承性的结构。
由于EJB 3.0和Spring相互学习了很多特性,所以,它们都在某种层次上支持XML和注释。例如,EJB 3.0中可以应用XML配置文件作为一个选择性的机制,用来改变注释的默认行为。注释也可以用来配置一些Spring服务。
在Spring 2中,采用了@PersistenceContext注释的方式来整合JPA(Java 持久性 API),从而实现了EntityManager对象的注入,同时通过@Transactional实现声明式事务管理。Spring 2利用注释来支持AspectJ(一种面向切面的框架,它扩展了Java语言),如@Aspect、@Before、@After、@Around等等注释。Spring 2中,使用@Repository注释,可以直接操作JPA或Hibernate API,而不需要使用Spring模板。
Spring的元数据模型非常的灵活的,因此在Spring中可以快速的建立起基于注释的元数据模型。而从最近发布的Spring 2.5看来,事实上也是这样。Spring 2.5全面支持JSR-250注释(JSR-250技术规范主要涉及J2SE和J2EE平台上开发普通语义概念的标注,提供一种独立技术),如@Resource、@PostConstruct、@PreDestroy、@WebServiceRef及@EJB。
特别值得一提的是@Resource,最早是为了在EJB 3使用Spring的依赖注入功能。但如今其功能已经扩展了,不但支持像JNDI的查找,还可以注入任何的Spring管理对象。这就把Spring的优势(Spring支持任何对象的依赖注入)和EJB的优势(使用注释代替XML)充分的结合起来了。
Spring 2.5中提供了完整的基于注释的依赖注入模型,如@Autowired及@Qualifier注释。用户通过@Autowired注解来对Bean的属性变量、属性Setter方法以及构造函数进行标注,配合AutowiredAnnotationBeanPostProcessor完成对Bean的自动装配。
@Component注释为用户自定义原形进行了扩展。Spring可以自动的检测到注释的组件。例如下面的代码
<context:component-scan base-package="org.springframework.samples.petclinic.web" />
Web控制器不需要额外的XML配置,因为使用了基于注释的依赖注入以及基于注释的请求映射。Web控制器通过如下的代码进行管理:
@Controller public class ClinicController { private final Clinic clinic; @Autowired public ClinicController(Clinic clinic) { this.clinic = clinic; }

 

0
相关文章