- 浏览: 21513675 次
- 性别:
博客专栏
-
跟我学spring3
浏览量:2420451
-
Spring杂谈
浏览量:3010227
-
跟开涛学SpringMVC...
浏览量:5640572
-
Servlet3.1规范翻...
浏览量:260217
-
springmvc杂谈
浏览量:1597941
-
hibernate杂谈
浏览量:250369
-
跟我学Shiro
浏览量:5860584
-
跟我学Nginx+Lua开...
浏览量:702883
-
亿级流量网站架构核心技术
浏览量:785743
文章分类
- 全部博客 (329)
- 跟我学Nginx+Lua开发 (13)
- 跟我学spring (54)
- 跟开涛学SpringMVC (34)
- spring4 (16)
- spring杂谈 (50)
- springmvc杂谈 (22)
- 跟我学Shiro (26)
- shiro杂谈 (3)
- hibernate杂谈 (10)
- java开发常见问题分析 (36)
- 加速Java应用开发 (5)
- Servlet 3.1规范[翻译] (21)
- servlet3.x (2)
- websocket协议[翻译] (14)
- websocket规范[翻译] (1)
- java web (6)
- db (1)
- js & jquery & bootstrap (4)
- 非技术 (4)
- reminder[转载] (23)
- 跟叶子学把妹 (8)
- nginx (2)
- 架构 (19)
- flume架构与源码分析 (4)
最新评论
-
xxx不是你可以惹得:
认真看错误代码,有时候重启电脑就行了 醉了 我把数据库配置写死 ...
第十六章 综合实例——《跟我学Shiro》 -
dagger9527:
holyselina 写道您前面说到能获取调用是的参数数组,我 ...
【第六章】 AOP 之 6.6 通知参数 ——跟我学spring3 -
xxx不是你可以惹得:
Access denied for user 'root'@' ...
第十六章 综合实例——《跟我学Shiro》 -
dagger9527:
只有@AspectJ支持命名切入点,而Schema风格不支持命 ...
【第六章】 AOP 之 6.5 AspectJ切入点语法详解 ——跟我学spring3 -
dagger9527:
支持虽然会迟到,但永远不会缺席!
【第四章】 资源 之 4.3 访问Resource ——跟我学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】
评论
可以参考我的这个项目
https://github.com/zhangkaitao/es
这些是原创
发表评论
-
第十九章 动态URL权限控制——《跟我学Shiro》
2014-03-28 22:51 0用过Spring Security的朋友应该比较熟悉对URL ... -
第十九章 动态URL权限控制——《跟我学Shiro》
2014-03-28 22:51 0用过Spring Security的朋友应该比较熟悉对URL ... -
在应用层通过spring解决数据库读写分离
2012-11-09 07:28 3如何配置mysql数据库的主从? 单机配置mys ... -
跟我学spring3系列 word原版 下载
2012-11-03 20:39 122246《跟我学spring3系列》自发布以来得到大家的认可,非 ... -
跟我学spring3 电子书下载(完)
2012-05-03 14:23 52754感谢iteye各位网友对我的支持,在此谢过了! ... -
跟我学spring3 目录贴及电子书下载
2012-04-10 19:00 390634扫一扫,关注我的公众号 购买地址 ... -
【第十三章】 测试 之 13.3 集成测试 ——跟我学spring3
2012-03-30 07:11 2753013.3 集成测试 13.3.1 ... -
【第十三章】 测试 之 13.1 概述 13.2 单元测试 ——跟我学spring3
2012-03-28 07:46 2363913.1 概述 13.1.1 测 ... -
【第十二章】零配置 之 12.4 基于Java类定义Bean配置元数据 ——跟我学spring3
2012-03-26 08:26 2993112.4 基于Java类定义Bean配置元数据 12 ... -
【第十二章】零配置 之 12.4 基于Java类定义Bean配置元数据 ——跟我学spring3
2012-03-26 08:00 56712.4 基于Java类定义Bean配置元数据 12 ... -
spring培训PPT(欢迎下载)
2012-03-24 21:55 45java私塾的 spring培训的PPT 欢迎大家下载。 包括 ... -
java私塾的spring培训PPT(欢迎下载)
2012-03-22 12:41 2973java私塾的 spring培训的PPT 欢迎大家下载。 ... -
【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟我学spring3
2012-03-22 08:00 2669212.3 注解实现Bean定 ... -
【第十二章】零配置 之 12.2 注解实现Bean依赖注入 ——跟我学spring3
2012-03-19 08:00 3318512.2 注解实现Bean依赖注入 12.2.1 ... -
【第十二章】零配置 之 12.1 概述 ——跟我学spring3
2012-03-19 07:59 2032712.1 概述 12.1.1 什 ... -
【第十一章】 SSH集成开发积分商城 之 11.3 实现积分商城层 ——跟我学spring3
2012-03-16 08:09 1809111.3 实现积分商城层 11.3.1 概述 ... -
【第十一章】 SSH集成开发积分商城 之 11.2 实现通用层 ——跟我学spring3
2012-03-14 08:08 1915111.2 实现通用层 11.2 ... -
【第十一章】 SSH集成开发积分商城 之 11.1 概述 ——跟我学spring3
2012-03-13 16:37 1944611.1 概述 11.1.1 功能概述 ... -
【第十章】集成其它Web框架 之 10.4 集成JSF ——跟我学spring3
2012-03-13 08:46 12621先进行通用配置, 【第十章】集成其它Web框架 之 1 ... -
【第十章】集成其它Web框架 之 10.3 集成Struts2.x ——跟我学spring3
2012-03-12 08:16 12955先进行通用配置, 【第十章】集成其它Web框架 之 1 ...
相关推荐
补丁名称:CP-U8V12.5-100000-180122-BO q——784352822 对应产品:U8 版本号:12.500 依赖补丁:KB-U8V12.5-000001-180118-InterfaceChangeFiles 发布时间:2018-01-23 13:04:02 安装位置:客户端 ...
补丁名称:CP-U8V12.5-100000-170321-JZ 对应产品:U8 版本号:12.500 依赖补丁:KB-U8V12.5-100000-170309-InterfaceChangeFiles 发布时间:2017/3/22 13:56:11 安装位置:客户端 数据库服务器 应用...
"postgresql-12.5-1-windows-x64-binaries.zip" 是PostgreSQL 12.5版本的Windows 64位二进制安装包,提供了一个在Windows环境下运行PostgreSQL服务器的完整解决方案。 1. **PostgreSQL 12.5 版本特性**: - ...
CP-U8V12.5-100000-180122-BO001.7z
PowerBuilder12.5企业版-005 PowerBuilder12.5 有注册程序,正式企业版。 这个版本的帮助文档是chm格式,比以前的好用。 放在这里备份。真的好用。 一个5个文件,使用7z 3.0压缩。
《PowerDesigner 12.5汉化包:深入解析与应用》 PowerDesigner是一款强大的数据库设计和建模工具,尤其在企业级应用中被广泛使用。12.5版本是其较早的一个稳定版本,虽然已有更新,但因其功能完善、稳定性好,仍有...
补丁名称:CP-U8V12.5-100000-161117-AA 对应产品:U8 版本号:12.500 依赖补丁:KB-U8V12.5-100000-160805-InterfaceChangeFiles 发布时间:2016/11/18 9:29:53 安装位置:客户端 数据库服务器 应用...
下载后双击打开,根据安装引导界面提示操作即可完成安装。
powerbuilder12.5 企业版-003 powerbuilder 12.5 企业版 注册 破解 一共5个文件,放在这里备份。
powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可
powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可
100000-170321-JZ.zip"很可能是指一个软件版本的压缩包,其中"CP"可能是软件或产品的代码名称,"U8V12.5"可能是版本号,"100000"可能代表某种序列号或计数,"170321"可能是该文件创建或更新的日期(2017年3月21日)...
向日葵客户端12.5 for Windows x86是一款专为32位Windows系统设计的远程控制软件。这款客户端让用户能够实现远程访问、管理个人或企业的计算机,无论是进行技术支持、远程办公还是设备监控,都能提供高效便捷的解决...
CP-U8V12.5-100000-180122-BO002.7z
PowerBuilder12.5企业版-001 PowerBuilder12.5 有注册程序,正式企业版。 这个版本的帮助文档是chm格式,比以前的好用。 放在这里备份。真的好用。 一个5个文件,使用7z 3.0压缩。
NetBeans 是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于 Java 等语言的开发,适用于Windows系统。
PowerBuilder12.5企业版-004 PowerBuilder12.5 有注册程序,正式企业版。 这个版本的帮助文档是chm格式,比以前的好用。 放在这里备份。真的好用。 一个5个文件,使用7z 3.0压缩。
CAP 5.0*10*12.5-H - GD CAP 5.0*10*16 CAP 5.0*10*16 - BK CAP 5.0*10*16 - GD CAP 5.0*10*16-H CAP 5.0*10*16-H - BK CAP 5.0*10*16-H - GD CAP 5.0*10*20 CAP 5.0*10*20 - BK CAP 5.0*10*20 - GD CAP 5.0*10*20-H...
向日葵客户端是一款广泛应用于远程控制领域的软件,其12.5版本专为Windows x64操作系统设计。这款客户端让用户能够轻松实现对远程计算机的访问和管理,无论距离多远,只要有网络连接,就可以像坐在电脑前一样操作。...
NetBeans 是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于 Java 等语言的开发,适用于Linux系统。