Spring mvc+struts2+Hibernate整合例項程式碼(註解詳解)

yaerfeng發表於2016-10-11

原文:Spring mvc+struts2+Hibernate整合例項程式碼(註解詳解)


:使用場景:

(1)由於專案的需要為了提高開發的效率程式碼簡潔,因此專案中部分使用註解來代替xml

(2)專案中使用註解的部分主要是spring依賴注入的那部分使用註解,其它的還是採用xml

(3)註解標籤的分類和使用:

:要點分析:

2.1元件注入:

@Service用於標註業務層元件(指的是service層)、

@Controller用於標註控制層元件(如struts中的action)、

@Repository用於標註資料訪問元件(指得是資料操作層),即DAO元件。

@Component泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註。(也就是說它可以代替@Service, @Controller, @Repository但是這樣的話就不很難辨清各個層的含義)

2.2元件的屬性注入:

@Autowired 是按照型別注入即byType

@Resource是按照名稱注入即byName

:案例說明:

<<<<元件注入:

3.1 ProductsDao為持久層介面

@Repository
public class ProductsDaoImpl  implements ProductsDao {

……

}

等價於:

@Repository("productsDaoImpl   ")
public class ProductsDaoImpl  implements ProductsDao {

……

}

注意:@Repository標籤通常是放在資料庫介面DAO的實現類上面,用於標註這個實現類是一個資料庫操作層,它注入到Spring容器的時候這個bean的名字或者是id就是這個類的全名首字母小寫,就像上面的例子@Repository和@Repository("productsDaoImpl   ")但是一般開發建議使用預設的即@Repository這樣可以避免一些不必要的錯誤

3.2 ProductsService為業務層介面

@Service
public class ProductsService Impl  implements ProductsService{

……

}

等價於:

@Service("productsServiceImpl ")
public class ProductsService Impl  implements ProductsService{

……

}

注意:@Service標籤通常是放在業務層介面Service的實現類上面,用於標註這個實現類是一個業務層即service層,它注入到Spring容器的時候這個bean的名字或者是id就是這個類的全名首字母小寫,就像上面的例子@Service和@Service("productsServiceImpl   ")但是一般開發建議使用預設的即@Service這樣可以避免一些不必要的錯誤

 

3.3 ProductsAction為業務層介面

@Controller
public class ProductsAction  extends ActionSupport{

……

}

等價於:

@ Controller ("productsAction ")
public class ProductsAction  extends  ActionSupport{

……

}

注意:@Controller標籤通常是放在控制器層上面,用於標註類是一個控制器即action層,它注入到Spring容器的時候這個bean的名字或者是id就是這個類的全名首字母小寫,就像上面的例子@Controller和@Controller("productsAction")但是一般開發建議使用預設的即@Controller這樣可以避免一些不必要的錯誤

3.4ProductsAdvice就是一個普通的類實現了一個通知的介面

@Component

public class ProductsAdvice implements MethodBeforeAdvice { 

    public RecordAdvice (){} 

     

    // 呼叫之前的通知方法 

    public void before(Method method, Object[] args, Object target) 

            throws Throwable { 

        // 得到目標類 

        HunterMan hunter = (HunterMan)target; 

        // 得到目標類的logger 

        Logger logger = Logger.getLogger(target.getClass()); 

        // 列印日誌 

        logger.info(hunter.getName()+" did "+method.getName()); 

    } 

注意:@Component的作用泛指所有的元件範圍廣,可以代表資料庫操作層DAO,可以代表業務層即service,可以代表控制器層action,也可以代表的普通的類,區別在於他們都是注入,最後注入到spring容器中,只不過你使用@Service注入的時候spring就知道你這個類是一個業務層的注入,你使用@Repository注入的時候spring知道你這個類是一個資料庫操作層,你使用@Controller注入的時候spring知道你這個類是一個控制器,你使用@Component注入的時候他可以理解為只是一個普通的類,因為別的程式使用的時候或者執行的時候需要這個物件所以就將這個物件注入進去了本身這個物件注入的時候沒有任何的含義。只是別的程式需要該物件的例項而已。

 

<<<<元件的屬性注入:

 

3.2 ProductsService為業務層介面

@Service
public class ProductsService Impl  implements ProductsService{

@Autowired

private ProductDao  ProductDaoImpl;  // 按型別即byType自動注入

}

等價於

@Service
public class ProductsService Impl  implements ProductsService{

@Resource

private ProductDao  ProductDaoImpl;  // 按型別即byName自動注入(ProductDaoImpl這個名稱必須和ProductDao 實現類 注入到spring容器的bean的id是一樣的)

}

注意: 業務層的實現 需要資料庫操作層DAO的支援即上面。ProductsService Impl業務層實現需要資料庫層DAO即ProductDao  的支援,我們不單單將ProductsServiceImpl注入到spring容器還要把他所需要的物件也注入到Spring容器中,但需要記住他所需要的物件事先是已經注入到spring容器中的,不然的話ProductsServiceImpl物件執行就會報錯,因為ProductsServiceImpl他所需要的物件你沒有提供給它。


最程式碼官方編輯於2014-5-27 20:22:28

相關文章