# 【第十二章】零配置 之 12.5 綜合示例-積分商城 ——跟我學spring3
## 12.5? 綜合示例
### 12.5.1? 概述
在第十一章中我們介紹了SSH集成,在進行SSH集成時都是通過基于XML配置文件配置每層的Bean,從而產生許多XML配置文件,本節將通過注解方式消除部分XML配置文件,實現所謂的零配置。
### 12.5.2? 項目拷貝
1、拷貝【第十一章? SSH集成開發】中的“pointShop”項目將其命名為“pointShop2”;
2、修改“pointShop2”項目下的“.settings”文件夾下的“org.eclipse.wst.common.component”文件,將“**<property name="context-root" value="pointShop"/>**”修改為“**<property name="context-root" value="pointShop2"/>**”,即該web項目的上下文為“pointShop2”,在瀏覽器中可以通過http://localhost:8080/pointShop2來訪問該web項目。
### 12.5.3? 數據訪問層變化
將dao層配置文件中的dao實現Bean定義刪除,通過在dao實現類頭上添加“@Repository”來定義dao實現Bean,并通過注解@Autowired來完成依賴注入。
1、刪除DAO層配置文件(cn/javass/point/dao/applicationContext-hibernate.xml)中的如下配置:
```
<bean id="abstractDao" abstract="true" init-method="init">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="goodsDao" class="cn.javass.point.dao.hibernate.GoodsHibernateDao"
parent="abstractDao"/>
<bean id="goodsCodeDao" class="cn.javass.point.dao.hibernate.GoodsCodeHibernateDao"
parent="abstractDao"/>
```
2、修改通用DAO實現cn.javass.commons.dao.hibernate.BaseHibernateDao,通過注解實現依賴注入和指定初始化方法:
```
public abstract class BaseHibernateDao<M extends Serializable, PK extends Serializable> extends HibernateDaoSupport implements IBaseDao<M, PK>, InitializingBean {
//省略類字段
@Autowired @Required
public void setSf(SessionFactory sf) {
setSessionFactory(sf);
}
@PostConstruct
@SuppressWarnings("unchecked")
public void init() {
//省略具體實現代碼
}
}
```
* setSf方法:通過@Autowired注解自動注入SessionFactory實現;
* init方法:通過@PostConstruct注解表示該方法是初始化方法;
3、修改cn.javass.point.dao.hibernate.GoodsHibernateDao,在該類上添加@Repository注解來進行DAO層Bean定義:
```
@Repository
public class GoodsHibernateDao extends BaseHibernateDao<GoodsModel, Integer> implements IGoodsDao {
……
}
```
4、修改cn.javass.point.dao.hibernate.GoodsCodeHibernateDao,在該類上添加@Repository注解來進行DAO層Bean定義:
```
@Repository
public class GoodsCodeHibernateDao extends BaseHibernateDao<GoodsCodeModel, Integer> implements IGoodsCodeDao {
……
}
```
DAO層到此就修改完畢,其他地方無需修改。
### 12.5.4? 業務邏輯層變化
將service層配置文件中的service實現Bean定義刪除,通過在service實現類頭上添加“@Service”來定義service實現Bean,并通過注解@Autowired來完成依賴注入。
1、刪除Service層配置文件(cn/javass/point/service/applicationContext-service.xml)中的如下配置:
```
<bean id="goodsService" class="cn.javass.point.service.impl.GoodsServiceImpl">
<property name="dao" ref="goodsDao"/>
</bean>
<bean id="goodsCodeService" class="cn.javass.point.service.impl.GoodsCodeServiceImpl">
<property name="dao" ref="goodsCodeDao"/>
<property name="goodsService" ref="goodsService"/>
</bean>
```
2、修改cn.javass.point.service.impl.GoodsServiceImpl,在該類上添加@Service注解來進行Service層Bean定義:
```
@Service
public class GoodsServiceImpl extends BaseServiceImpl<GoodsModel, Integer> implements IGoodsService {
@Autowired @Required
public void setGoodsDao(IGoodsDao dao) {
setDao(dao);
}
}
```
* **setGoodsDao方法:**用于注入IGoodsDao實現,此處直接委托給setDao方法。
3、修改cn.javass.point.service.impl.GoodsCodeServiceImpl,在該類上添加@Service注解來進行Service層Bean定義:
```
@Service
public class GoodsCodeServiceImpl extends BaseServiceImpl<GoodsCodeModel, Integer> implements IGoodsCodeService {
@Autowired @Required
public void setGoodsCodeDao(IGoodsCodeDao dao) {
setDao(dao);
}
@Autowired @Required
public void setGoodsService(IGoodsService goodsService) {
this.goodsService = goodsService;
}
}
```
* **setGoodsCodeDao方法:**用于注入IGoodsCodeDao實現,此處直接委托給setDao方法;
* **setGoodsService方法:**用于注入IGoodsService實現。
Service層到此就修改完畢,其他地方無需修改。
### 12.5.5? 表現層變化
類似于數據訪問層和業務邏輯層修改,對于表現層配置文件直接刪除,通過在action實現類頭上添加“@Controller”來定義action實現Bean,并通過注解@Autowired來完成依賴注入。
1、? 刪除表現層所有Spring配置文件(cn/javass/point/web):
```
cn/javass/point/web/pointShop-admin-servlet.xml
cn/javass/point/web/pointShop-front-servlet.xml
```
2、修改表現層管理模塊的cn.javass.point.web.admin.action.GoodsAction,在該類上添加@Controller注解來進行表現層Bean定義,且作用域為“prototype”:
```
@Controller("/admin/goodsAction")
@Scope("prototype")
public class GoodsAction extends BaseAction {
private IGoodsService goodsService;
@Autowired @Required
public void setGoodsService(IGoodsService goodsService) {
this.goodsService = goodsService;
}
}
```
* **setGoodsService方法:**用于注入IGoodsService實現。
3、修改表現層管理模塊的cn.javass.point.web.admin.action.GoodsCodeAction,在該類上添加@Controller注解來進行表現層Bean定義,且作用域為“prototype”:
```
@Controller("/admin/goodsCodeAction")
@Scope("prototype")
public class GoodsCodeAction extends BaseAction {
@Autowired @Required
public void setGoodsCodeService(IGoodsCodeService goodsCodeService) {
this.goodsCodeService = goodsCodeService;
}
@Autowired @Required
public void setGoodsService(IGoodsService goodsService) {
this.goodsService = goodsService;
}
}
```
* **setGoodsCodeService方法:**用于注入IGoodsCodeService實現;
* **setGoodsService方法:**用于注入IGoodsService實現。
3、修改表現層前臺模塊的cn.javass.point.web.front.action.GoodsAction,在該類上添加@Controller注解來進行表現層Bean定義,且作用域為“prototype”:
```
@Controller("/front/goodsAction")
@Scope("prototype")
public class GoodsAction extends BaseAction {
@Autowired @Required
public void setGoodsService(IGoodsService goodsService) {
this.goodsService = goodsService;
}
@Autowired @Required
public void setGoodsCodeService(IGoodsCodeService goodsCodeService) {
this.goodsCodeService = goodsCodeService;
}
}
```
* **setGoodsCodeService方法:**用于注入IGoodsCodeService實現;
* **setGoodsService方法:**用于注入IGoodsService實現。
### 12.5.6? 其他變化
1、定義一個基于Java方法的配置類,用于加載XML配置文件:
```
package cn.javass.point;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource(
{"classpath:applicationContext-resources.xml",
"classpath:cn/javass/point/dao/applicationContext-hibernate.xml",
"classpath:cn/javass/point/service/applicationContext-service.xml"
})
public class AppConfig {
}
```
該類用于加載零配置中一般不變的XML配置文件,如事務管理,數據源、SessionFactory,這些在幾乎所有項目中都是類似的,因此可以作為通用配置。
2、修改集成其它Web框架的通用配置,將如下配置:
```
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext-resources.xml,
classpath:cn/javass/point/dao/applicationContext-hibernate.xml,
classpath:cn/javass/point/service/applicationContext-service.xml,
classpath:cn/javass/point/web/pointShop-admin-servlet.xml,
classpath:cn/javass/point/web/pointShop-front-servlet.xml
</param-value>
</context-param>
```
修改為如下配置:
```
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>cn.javass.point</param-value>
</context-param>
```
* **contextClass:**使用notationConfigWebApplicationContext替換默認的XmlWebApplicationContext;
* **contextConfigLocation:**指定為“cn.javass.point”,表示將通過掃描該類路徑“cn.javass.point”下的注解類來進行加載Bean定義。
啟動pointShop2項目,在瀏覽器輸入http://localhost:8080/pointShop2/admin/goods/list.action訪問積分商城后臺,如果沒問題說明零配置整合成功。
到此零配置方式實現SSH集成已經整合完畢,相對于基于XML方式主要減少了配置的數量和配置文件的數量。
原創內容,轉載請注明私塾在線【[http://sishuok.com/forum/blogPost/list/2553.html](http://sishuok.com/forum/blogPost/list/2553.html#7328)】
- 跟我學 Spring3
- 【第二章】 IoC 之 2.1 IoC基礎 ——跟我學Spring3
- 【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我學Spring3
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我學Spring3
- 【第三章】 DI 之 3.1 DI的配置使用 ——跟我學spring3
- 【第三章】 DI 之 3.2 循環依賴 ——跟我學spring3
- 【第三章】 DI 之 3.3 更多DI的知識 ——跟我學spring3
- 【第三章】 DI 之 3.4 Bean的作用域 ——跟我學spring3
- 【第四章】 資源 之 4.1 基礎知識 ——跟我學spring3
- 【第四章】 資源 之 4.2 內置Resource實現 ——跟我學spring3
- 【第四章】 資源 之 4.3 訪問Resource ——跟我學spring3
- 【第四章】 資源 之 4.4 Resource通配符路徑 ——跟我學spring3
- 【第五章】Spring表達式語言 之 5.1 概述 5.2 SpEL基礎 ——跟我學spring3
- 【第五章】Spring表達式語言 之 5.3 SpEL語法 ——跟我學spring3
- 【第五章】Spring表達式語言 之 5.4在Bean定義中使用EL—跟我學spring3
- 【第六章】 AOP 之 6.1 AOP基礎 ——跟我學spring3
- 【第六章】 AOP 之 6.2 AOP的HelloWorld ——跟我學spring3
- 【第六章】 AOP 之 6.3 基于Schema的AOP ——跟我學spring3
- 【第六章】 AOP 之 6.4 基于@AspectJ的AOP ——跟我學spring3
- 【第六章】 AOP 之 6.5 AspectJ切入點語法詳解 ——跟我學spring3
- 【第六章】 AOP 之 6.6 通知參數 ——跟我學spring3
- 【第六章】 AOP 之 6.7 通知順序 ——跟我學spring3
- 【第六章】 AOP 之 6.8 切面實例化模型 ——跟我學spring3
- 【第六章】 AOP 之 6.9 代理機制 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.1 概述 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.2 JDBC模板類 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.3 關系數據庫操作對象化 ——跟我學spring3
- 【第七章】 對JDBC的支持 之 7.4 Spring提供的其它幫助 ——跟我學spring3【私塾在線原創】
- 【第七章】 對JDBC的支持 之 7.5 集成Spring JDBC及最佳實踐 ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.1 概述 ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.2 集成Hibernate3 ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.3 集成iBATIS ——跟我學spring3
- 【第八章】 對ORM的支持 之 8.4 集成JPA ——跟我學spring3
- 【第九章】 Spring的事務 之 9.1 數據庫事務概述 ——跟我學spring3
- 【第九章】 Spring的事務 之 9.2 事務管理器 ——跟我學spring3
- 【第九章】 Spring的事務 之 9.3 編程式事務 ——跟我學spring3
- 【第九章】 Spring的事務 之 9.4 聲明式事務 ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.1 概述 ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.2 集成Struts1.x ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.3 集成Struts2.x ——跟我學spring3
- 【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我學spring3
- 【第十一章】 SSH集成開發積分商城 之 11.1 概述 ——跟我學spring3
- 【第十一章】 SSH集成開發積分商城 之 11.2 實現通用層 ——跟我學spring3
- 【第十一章】 SSH集成開發積分商城 之 11.3 實現積分商城層 ——跟我學spring3
- 【第十二章】零配置 之 12.1 概述 ——跟我學spring3
- 【第十二章】零配置 之 12.2 注解實現Bean依賴注入 ——跟我學spring3
- 【第十二章】零配置 之 12.3 注解實現Bean定義 ——跟我學spring3
- 【第十二章】零配置 之 12.4 基于Java類定義Bean配置元數據 ——跟我學spring3
- 【第十二章】零配置 之 12.5 綜合示例-積分商城 ——跟我學spring3
- 【第十三章】 測試 之 13.1 概述 13.2 單元測試 ——跟我學spring3
- 【第十三章】 測試 之 13.3 集成測試 ——跟我學spring3
- 跟我學 Spring MVC
- SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常見問題總結
- Spring Web MVC中的頁面緩存支持 ——跟我學SpringMVC系列
- Spring3 Web MVC下的數據類型轉換(第一篇)——《跟我學Spring3 Web MVC》搶先看
- Spring3 Web MVC下的數據格式化(第二篇)——《跟我學Spring3 Web MVC》搶先看
- 第一章 Web MVC簡介 —— 跟開濤學SpringMVC
- 第二章 Spring MVC入門 —— 跟開濤學SpringMVC
- 第三章 DispatcherServlet詳解 ——跟開濤學SpringMVC
- 第四章 Controller接口控制器詳解(1)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(2)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(3)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解 (4)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(5)——跟著開濤學SpringMVC
- 跟著開濤學SpringMVC 第一章源代碼下載
- 第二章 Spring MVC入門 源代碼下載
- 第四章 Controller接口控制器詳解 源代碼下載
- 第四章 Controller接口控制器詳解(6)——跟著開濤學SpringMVC
- 第四章 Controller接口控制器詳解(7 完)——跟著開濤學SpringMVC
- 第五章 處理器攔截器詳解——跟著開濤學SpringMVC
- 源代碼下載 第五章 處理器攔截器詳解——跟著開濤學SpringMVC
- 注解式控制器運行流程及處理器定義 第六章 注解式控制器詳解——跟著開濤學SpringMVC
- 源代碼下載 第六章 注解式控制器詳解
- SpringMVC3強大的請求映射規則詳解 第六章 注解式控制器詳解——跟著開濤學SpringMVC
- Spring MVC 3.1新特性 生產者、消費者請求限定 —— 第六章 注解式控制器詳解——跟著開濤學SpringMVC
- SpringMVC強大的數據綁定(1)——第六章 注解式控制器詳解——跟著開濤學SpringMVC
- SpringMVC強大的數據綁定(2)——第六章 注解式控制器詳解——跟著開濤學SpringMVC
- SpringMVC數據類型轉換——第七章 注解式控制器的數據驗證、類型轉換及格式化——跟著開濤學SpringMVC
- SpringMVC數據格式化——第七章 注解式控制器的數據驗證、類型轉換及格式化——跟著開濤學SpringMVC
- SpringMVC數據驗證——第七章 注解式控制器的數據驗證、類型轉換及格式化——跟著開濤學SpringMVC