欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

跟我学Spring3(12.5):零配置综合示例-积分商城,spring312.5

来源: javaer 分享于  点击 2041 次 点评:152

跟我学Spring3(12.5):零配置综合示例-积分商城,spring312.5


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方式主要减少了配置的数量和配置文件的数量。

本系列:

  • 跟我学 Spring 3(1): Spring 概述
  • 跟我学 Spring 3(2.1):IoC 基础 
  • 跟我学Spring3(2.2):IoC容器基本原理
  • 跟我学Spring3(2.3):IoC容器基本原理
  • 跟我学Spring3(3.1):DI的配置使用
  • 跟我学Spring3(3.2):DI之循环依赖
  • 跟我学Spring3(3.3):更多的DI知识
  • 跟我学Spring3(3.4):DI之Bean的作用域
  • 跟我学Spring3(4.1):资源之基础知识
  • 跟我学Spring3(4.2):内置Resources实现
  • 跟我学Spring3(4.3):访问Resource
  • 跟我学Spring3(4.4):Resource通配符路径
  • 跟我学Spring3(5.1 & 5.2):Spring表达式语言之概述和SpEL基础
  • 跟我学Spring3(5.3):Spring 表达式语言之 SpEL 语法
  • 跟我学Spring3(5.4):在Bean定义中使用EL
  • 跟我学Spring3(6.1):AOP的HelloWorld
  • 跟我学Spring3(6.3):基于Schema的AOP
  • 跟我学Spring3(6.5):AspectJ切入点语法详解
  • 跟我学Spring3(6.6): 通知参数 
  • 跟我学Spring3(6.7): 通知顺序
  • 跟我学Spring3(6.8):切面实例化模型
  • 跟我学Spring3(6.9):代理机制
  • 跟我学Spring3( 7.1 ):对JDBC的支持之概述
  • 跟我学Spring3( 7.2 ):对JDBC的支持之JDBC模板类
  • 跟我学Spring3(7.3):对JDBC的支持之关系数据库操作对象化
  • 跟我学Spring3(7.4):对JDBC的支持之Spring提供的其它帮助
  • 跟我学Spring3(7.5):对JDBC的支持之集成Spring JDBC及最佳实践
  • 跟我学Spring3(8.1):对ORM的支持之概述
  • 跟我学Spring3(8.2):对ORM的支持之集成Hibernate3
  • 跟我学Spring3(9.1):Spring的事务之数据库事务概述
  • 跟我学Spring3(9.2):Spring的事务之事务管理器
  • 跟我学Spring3(9.3):Spring的事务之编程式事务
  • 跟我学Spring3(9.4):Spring的事务之声明式事务
  • 跟我学Spring3(10.1):集成其它Web框架之概述
  • 跟我学Spring3(10.2):集成其它Web框架之集成Struts1.x
  • 跟我学Spring3(10.3):集成其它Web框架之集成Struts2.x
  • 跟我学Spring3(10.4):集成其它Web框架之集成JSF
  • 跟我学Spring3(11.1):SSH集成开发积分商城之概述
  • 跟我学Spring3(11.2):SSH集成开发积分商城之实现通用层
  • 跟我学Spring3(11.3):SSH集成开发积分商城之实现积分商城层
  • 跟我学Spring3(12.1):零配置之概述
  • 跟我学Spring3(12.2):零配置之注解实现Bean依赖注入
  • 跟我学Spring3(12.3):零配置之注解实现Bean定义
  • 跟我学Spring3(12.4):零配置之基于Java类定义Bean配置元数据
  • 跟我学Spring3(12.5):零配置综合示例-积分商城
相关栏目:

用户点评