【武宇】
上次讲解了java 5中的泛型这个比较重要的新概念,以及自动封装解封机制(即Integer和int自动互相转化),还有for
each循环等java 5的新特性。今天再讲讲,Java5中另一个重要的特性,对整个java和J2EE体系
产生重要影响的元数据,或者叫做标注、注释。英文可以叫作meta
data或者Annotation。这个特性其实很简单,但却很好用,在很多新的框架和新技术中运用广泛如spring,EJB3.0,J2EE
5,JDBC4.0中都用到了这个特性。Annotation可以代替xml来实现例如松耦合的思想,设置实现依赖注入等技术,
这样就不用再写那么多复杂的xml了
首先看个例子体会一下: 在Spring1.2中写一个Service @Transactional public interface OrderService { void createOrder(Order order); List queryByCriteria(Order criteria);
注意@Transactional就是Annotation(标注),有了这个标注就表示这个接口里的方法都是采用默认属性支持事务的,自己不用
再写begin ,commit,rollback等语句,当然还需要在spring中做其他配置才行,这里暂时略,大家看明白标注的意思就可以
再看一个带参数的标注 @Transactional(readOnly=true) interface TestService { @Transactional(readOnly=false,rollbackFor=DuplicateOrderIdException.class) void createOrder(Order order) throws DuplicateOrderIdException ; List queryByCriteria(Order criteria); } 这里 @Transactional(readOnly=true),表示这个接口里的方法都进行只读事务处理, @Transactional(readOnly=false,rollbackFor=DuplicateOrderIdException.class),表示 void createOrder(Order order)方法进行读写事务处理,抛出DuplicateOrderIdException时会自动回滚,默认时是RuntimeException回滚 这些都是spring1.2中的功能,
下面是Java EE 5中使用Annotation定义Web Service的一个例子:(引用自其他文章) package endpoint;
import javax.jws.WebService;
@WebService public class Hello {
public String sayHello(String param) { return “Hello “ + param; } }
一个普通的Java类,通过加入@WebService这一Annotation,服务器就可将此类中的公共方法发布为Web Service,简单又方便。
EJB3.0用使用Annotation(引自其他文章) EJB3.0是对重载的EJB2的批判性思考和扬弃。在EJB3.0中,不再需
要EJB
home接口,也不需要实现javax.ejb.SessionBean接口,一个简单的POJO对象就足于代表实体对象,并支持继承和多态。同时,困扰
人们多年的EJB部署描述符变成可选的。EJB的持久变得更加简化、轻量级,EJB的查找也变得更加简便,JNDI
API不再是必须的。EJB3.0还使用了Interceptor,在业务方法被调用前进行拦截,因而更加容易实现灵活的AOP编程。 package com.example; @Session public class MyEJB { @Resource(name = “employeeDatabase”) private DataSource myDS; ... }
上述代码片断定义了名为MyEJB的Session Bean,并定义了一个名为employeeDatabase的资源,将其注入到一个名为myDS的字段。通过依赖注入,不再需要复杂的部署描述符入口,事情就这么简单。
以上举了几个标注在spring,Web
Service,EJB3.0中的应用,大家对标注有个认识了,实际上标注(Annotation)就是在程序中加上一些说明,这样容器在调用这些类,方
法的时候就知道怎么处理了。(实际上是底层通过java反射机制将标注和其属性读取出来。)那么如何自己定义标注呢,也不复杂,我就不一一说了,可以看下
文
|