`
jinnianshilongnian
  • 浏览: 21468743 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2411753
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3003021
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5635657
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:258906
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1595177
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:249651
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5852844
Group-logo
跟我学Nginx+Lua开...
浏览量:700210
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:782891
社区版块
存档分类
最新评论

【第十二章】零配置 之 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)中的如下配置:

 

java代码:
<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,通过注解实现依赖注入和指定初始化方法:

 

java代码:
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定义:

 

java代码:
@Repository
public class GoodsHibernateDao extends BaseHibernateDao<GoodsModel, Integer> implements IGoodsDao {
……
}

 

4、修改cn.javass.point.dao.hibernate.GoodsCodeHibernateDao,在该类上添加@Repository注解来进行DAO层Bean定义:

 

java代码:
@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)中的如下配置:

 

java代码:
<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定义:

 

java代码:
@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定义:

 

java代码:
@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):

 

java代码:
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”:

 

java代码:
@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”:

 

java代码:
@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”:

 

java代码:
@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配置文件:

 

java代码:
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框架的通用配置,将如下配置:

 

java代码:
<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>

 

修改为如下配置:

 

 

java代码:
<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

 

20
4
分享到:
评论
4 楼 jinnianshilongnian 2013-03-15  
jluzh04100103 写道
tao哥 小弟没什么项目经验;想请教一下:公司里一般是不是按这种模式开发的!一般不是还结合一些前台框架么?常用的有哪些啊?用不用现在学?还有半个学期就实习了!有没有什么建议啊?tao哥 有maven吗?什么时候出?


可以参考我的这个项目
https://github.com/zhangkaitao/es
3 楼 jluzh04100103 2013-03-14  
tao哥 小弟没什么项目经验;想请教一下:公司里一般是不是按这种模式开发的!一般不是还结合一些前台框架么?常用的有哪些啊?用不用现在学?还有半个学期就实习了!有没有什么建议啊?tao哥 有maven吗?什么时候出?
2 楼 jinnianshilongnian 2012-12-28  
tidddd 写道
弱弱的问一下,tao哥把这些都翻译完毕一共用了多长时间啊?

这些是原创
1 楼 tidddd 2012-12-28  
弱弱的问一下,tao哥把这些都翻译完毕一共用了多长时间啊?

相关推荐

    CP-U8V12.5-100000-180122-BO.msi

    补丁名称: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.msi

    补丁名称: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-1-windows-x64-binaries.zip" 是PostgreSQL 12.5版本的Windows 64位二进制安装包,提供了一个在Windows环境下运行PostgreSQL服务器的完整解决方案。 1. **PostgreSQL 12.5 版本特性**: - ...

    CP-U8V12.5-100000-180122-BO001.7z

    CP-U8V12.5-100000-180122-BO001.7z

    PowerBuilder 12.5企业版-005

    PowerBuilder12.5企业版-005 PowerBuilder12.5 有注册程序,正式企业版。 这个版本的帮助文档是chm格式,比以前的好用。 放在这里备份。真的好用。 一个5个文件,使用7z 3.0压缩。

    PowerDesigner12.5汉化包-.rar

    《PowerDesigner 12.5汉化包:深入解析与应用》 PowerDesigner是一款强大的数据库设计和建模工具,尤其在企业级应用中被广泛使用。12.5版本是其较早的一个稳定版本,虽然已有更新,但因其功能完善、稳定性好,仍有...

    CP-U8V12.5-100000-180507-EQ.msi

    补丁名称:CP-U8V12.5-100000-161117-AA 对应产品:U8 版本号:12.500 依赖补丁:KB-U8V12.5-100000-160805-InterfaceChangeFiles 发布时间:2016/11/18 9:29:53 安装位置:客户端 数据库服务器 应用...

    向日葵客户端12.5-windows-x86.zip

    向日葵客户端12.5 for Windows x86是一款专为32位Windows系统设计的远程控制软件。这款客户端让用户能够实现远程访问、管理个人或企业的计算机,无论是进行技术支持、远程办公还是设备监控,都能提供高效便捷的解决...

    powerdesigner12.5crack汉化-直接替换安装文件即可

    powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可

    powerdesigner12.5crack汉化-直接替换安装文件即可2

    powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可 powerdesigner12.5crack汉化-直接替换安装文件即可

    CP-U8V12.5-100000-170321-JZ.zip

    100000-170321-JZ.zip"很可能是指一个软件版本的压缩包,其中"CP"可能是软件或产品的代码名称,"U8V12.5"可能是版本号,"100000"可能代表某种序列号或计数,"170321"可能是该文件创建或更新的日期(2017年3月21日)...

    CP-U8V12.5-100000-180122-BO002.7z

    CP-U8V12.5-100000-180122-BO002.7z

    powerbuilder12.5 企业版-003

    powerbuilder12.5 企业版-003 powerbuilder 12.5 企业版 注册 破解 一共5个文件,放在这里备份。

    PowerBuilder12.5企业版-001

    PowerBuilder12.5企业版-001 PowerBuilder12.5 有注册程序,正式企业版。 这个版本的帮助文档是chm格式,比以前的好用。 放在这里备份。真的好用。 一个5个文件,使用7z 3.0压缩。

    表贴插装电容类Altium封装库AD三维视图PCB封装库(2D3D封装库).PcbLib

    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...

    Apache-NetBeans-12.5-bin-windows-x64.exe

    NetBeans 是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于 Java 等语言的开发,适用于Windows系统。

    PowerBuilder12.5企业版-004

    PowerBuilder12.5企业版-004 PowerBuilder12.5 有注册程序,正式企业版。 这个版本的帮助文档是chm格式,比以前的好用。 放在这里备份。真的好用。 一个5个文件,使用7z 3.0压缩。

    向日葵客户端12.5-windows-x64.zip

    向日葵客户端是一款广泛应用于远程控制领域的软件,其12.5版本专为Windows x64操作系统设计。这款客户端让用户能够轻松实现对远程计算机的访问和管理,无论距离多远,只要有网络连接,就可以像坐在电脑前一样操作。...

    PowerDesigner12.5 教程系列--概念数据模型

    **PowerDesigner 12.5 概念数据模型详解** PowerDesigner是一款强大的数据库设计与建模工具,尤其在企业级应用开发中广泛使用。在12.5版本中,它提供了对概念数据模型(Conceptual Data Model, CDM)的强大支持,...

    Apache-NetBeans-12.5-bin-macosx.dmg

    NetBeans 是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于 Java 等语言的开发,适用于macOS系统。

Global site tag (gtag.js) - Google Analytics