首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

【第十二章】零配置 之 12.5 综合示例-积分商城 ——跟小弟我学spring3

2012-07-23 
【第十二章】零配置 之 12.5 综合示例-积分商城 ——跟我学spring312.5? 综合示例12.5.1? 概述在第十一章中我

【第十二章】零配置 之 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"        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代码:
    @Repositorypublic class GoodsHibernateDao extends BaseHibernateDao<GoodsModel, Integer> implements IGoodsDao {……}

    ?

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

    ?

    java代码:
    @Repositorypublic 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" ref="goodsDao"/></bean><bean id="goodsCodeService" ref="goodsCodeDao"/>    <property name="goodsService" ref="goodsService"/></bean>

    ?

    ?

    2、修改cn.javass.point.service.impl.GoodsServiceImpl,在该类上添加@Service注解来进行Service层Bean定义:

    ?

    java代码:
    @Servicepublic 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代码:
      @Servicepublic 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.xmlcn/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】

                ?

热点排行