| 【武宇】
 上次講解了java 5中的泛型這個比較重要的新概念,以及自動封裝解封機(jī)制(即Integer和int自動互相轉(zhuǎn)化),還有for
                                                each循環(huán)等java 5的新特性。今天再講講,Java5中另一個重要的特性,對整個java和J2EE體系
                                                產(chǎn)生重要影響的元數(shù)據(jù),或者叫做標(biāo)注、注釋。英文可以叫作meta
                                                data或者Annotation。這個特性其實很簡單,但卻很好用,在很多新的框架和新技術(shù)中運(yùn)用廣泛如spring,EJB3.0,J2EE
                                                5,JDBC4.0中都用到了這個特性。Annotation可以代替xml來實現(xiàn)例如松耦合的思想,設(shè)置實現(xiàn)依賴注入等技術(shù),
                                                這樣就不用再寫那么多復(fù)雜的xml了
 首先看個例子體會一下:
 在Spring1.2中寫一個Service
 @Transactional
 public interface OrderService {
 void createOrder(Order order);
 List queryByCriteria(Order criteria);
 注意@Transactional就是Annotation(標(biāo)注),有了這個標(biāo)注就表示這個接口里的方法都是采用默認(rèn)屬性支持事務(wù)的,自己不用
                                                再寫begin ,commit,rollback等語句,當(dāng)然還需要在spring中做其他配置才行,這里暫時略,大家看明白標(biāo)注的意思就可以
 再看一個帶參數(shù)的標(biāo)注
 @Transactional(readOnly=true)
 interface TestService {
 @Transactional(readOnly=false,rollbackFor=DuplicateOrderIdException.class)
 void createOrder(Order order) throws DuplicateOrderIdException ;
 List queryByCriteria(Order criteria);
 }
 這里
 @Transactional(readOnly=true),表示這個接口里的方法都進(jìn)行只讀事務(wù)處理,
 @Transactional(readOnly=false,rollbackFor=DuplicateOrderIdException.class),表示
 void createOrder(Order order)方法進(jìn)行讀寫事務(wù)處理,拋出DuplicateOrderIdException時會自動回滾,默認(rèn)時是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,服務(wù)器就可將此類中的公共方法發(fā)布為Web Service,簡單又方便。
 EJB3.0用使用Annotation(引自其他文章)
 EJB3.0是對重載的EJB2的批判性思考和揚(yáng)棄。在EJB3.0中,不再需
                                                要EJB
                                                home接口,也不需要實現(xiàn)javax.ejb.SessionBean接口,一個簡單的POJO對象就足于代表實體對象,并支持繼承和多態(tài)。同時,困擾
                                                人們多年的EJB部署描述符變成可選的。EJB的持久變得更加簡化、輕量級,EJB的查找也變得更加簡便,JNDI 
                                                API不再是必須的。EJB3.0還使用了Interceptor,在業(yè)務(wù)方法被調(diào)用前進(jìn)行攔截,因而更加容易實現(xiàn)靈活的AOP編程。
 package com.example;
 @Session
 public class MyEJB {
 @Resource(name = “employeeDatabase”)
 private DataSource myDS;
 ...
 }
 上述代碼片斷定義了名為MyEJB的Session Bean,并定義了一個名為employeeDatabase的資源,將其注入到一個名為myDS的字段。通過依賴注入,不再需要復(fù)雜的部署描述符入口,事情就這么簡單。
 
 以上舉了幾個標(biāo)注在spring,Web
                                                Service,EJB3.0中的應(yīng)用,大家對標(biāo)注有個認(rèn)識了,實際上標(biāo)注(Annotation)就是在程序中加上一些說明,這樣容器在調(diào)用這些類,方
                                                法的時候就知道怎么處理了。(實際上是底層通過java反射機(jī)制將標(biāo)注和其屬性讀取出來。)那么如何自己定義標(biāo)注呢,也不復(fù)雜,我就不一一說了,可以看下
                                                文
 
 
 |