`

Jpetstore阅读心得之分层结构

阅读更多

虽然对 Spring 不熟悉,又不懂 iBatis ,而且对模式的概念还没有弄清楚,但也硬着头皮去读 Spring 包自带的 Jpetstore 经典 J2EE 例子。

可以肯定, Jpetstore 是按照 MVC 模式设计的。持久化层用 iBatis (这个我不懂,我希望是用 Hibernate ), web 层控制器的 servlet 有两个选择,一个是用 Struts ,另一个是 Spring MVC

以下是自己的阅读体会,也许分析不当或描述不清,但也算初步尝试,所以记下来了。

一,分层结构 <?XML:NAMESPACE PREFIX = O /?>

Jpetstore 使用了门面模式、单例模式, DAO 模式。

 

1. 门面模式

门面接口的实现类: PetStoreImpl

public class PetStoreImpl implements PetStoreFacade, OrderService

{

    private AccountDao accountDao;

    private CategoryDao categoryDao;

    private ProductDao productDao;

    private ItemDao itemDao;

    private OrderDao orderDao;

 

    // ----------------------------------------------------------------

    // Setter methods for dependency injection

    // ----------------------------------------------------------------

 

    public void setAccountDao(AccountDao accountDao)

    {

        this.accountDao = accountDao;

    }

    // 省略余下的四个setter

    // -------------------------------------------------------------------------

    // Operation methods, implementing the PetStoreFacade interface

    // -------------------------------------------------------------------------

 

    public Account getAccount(String username)

    {

        return this.accountDao.getAccount(username);

    }

    public Account getAccount(String username, String password)

    {

        return this.accountDao.getAccount(username, password);

    }

    public void insertAccount(Account account)

    {

        this.accountDao.insertAccount(account);

    }

    public void updateAccount(Account account)

    {

        this.accountDao.updateAccount(account);

    }

    // 省略其它的crud方法

}

 

暂时先不管 OrderService 这个接口。

PetStoreImpl 的那些 setter 方法正是 spring 的注入方法。

在配置文件中:

< bean id ="petStore" class ="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl">

    < property name ="accountDao" ref ="accountDao" />

    < property name ="categoryDao" ref ="categoryDao" />

    < property name ="productDao" ref ="productDao" />

    < property name ="itemDao" ref ="itemDao" />

    < property name ="orderDao" ref ="orderDao" />

</ bean >

 

2. 单例模式

单例模式中,我们一般把类的构造方法设置为 private ,提供静态工厂方法给外界返回唯一的实例,但在这里,它不是这样做的,因为有了 Spring 。有了 Spring BeanFactory 管理,可以轻易配置实现单例。看看作者的注释。

 

There is one instance of this class in the JPetStore application. In Spring terminology, it is a "singleton". This means a per-Application Context singleton. The factory creates a single instance; there is no need for a private constructor, static factory method etc as in the traditional implementation of the Singleton Design Pattern.

 

单例的 PetStoreImpl

Struts 当控制器时,它这样做:为整个应用程序编写一个继承自 Action BaseAction 基础类。

 

public abstract class BaseAction extends Action

{

    private PetStoreFacade petStore;

 

    public void setServlet(ActionServlet actionServlet)

    {

        super.setServlet(actionServlet);

        if (actionServlet != null)

        {

            ServletContext servletContext = actionServlet.getServletContext();

            WebApplicationContext wac = WebApplicationContextUtils

                .getRequiredWebApplicationContext(servletContext);

            this.petStore = (PetStoreFacade) wac.getBean("petStore");

        }

    }

 

    protected PetStoreFacade getPetStore()

    {

        return petStore;

    }

}

 

3.DAO 模式

ORM 工具用 iBatis ,在领域模式层使用了粗粒度对象。下面是 AccountDao 的配置。

 

< select id ="getAccountByUsername" resultMap ="result">

    select

          signon.username as userid,

          account.email,

          account.firstname,

          account.lastname,

          account.status,

          account.addr1,

          account.addr2,

          account.city,

          account.state,

          account.zip,

          account.country,

          account.phone,

          profile.langpref,

          profile.favcategory,

          profile.mylistopt,

          profile.banneropt,

           bannerdata.bannername

    from account, profile, signon, bannerdata

    where account.userid = #value#

      and signon.username = account.userid

      and profile.userid = account.userid

      and profile.favcategory = bannerdata.favcategory

  </ select >

分享到:
评论

相关推荐

    jpetstore物理分层demo

    《jpetstore物理分层架构解析与实践》 在软件开发领域,良好的架构设计是项目成功的关键。"jpetstore物理分层demo"是一个展示如何实施分层架构的实例,虽然其中存在一些小bug,但它为我们提供了一个学习和理解分层...

    jpetstore系统架构图

    在IT行业的软件开发领域,jpetstore系统作为一款开源的网上宠物商店示例应用程序,以其清晰的分层架构、强大的功能性和高度可扩展性而著称。尤其在jpetstore5.0版本中,其系统架构图详细展示了系统的各个组成部分...

    jpetstore

    **jpetstore** 是一个由Sun Microsystems公司开发的开源Web应用程序示例,它是一个基于Java技术的网上宠物商店。这个项目被设计成一个简单的“Hello, World”式的Web应用,用以展示Java技术和相关的框架在构建电子...

    学习Spring 的例子JpetStore

    《Spring框架学习:以JpetStore为例》 Spring框架是Java企业级应用开发中的核心...在学习过程中,我们不仅要理解代码的结构和逻辑,还要思考这些设计背后的原理和最佳实践,以便在自己的项目中发挥Spring的最大价值。

    jpetstore开源学习代码

    《jpetstore开源学习代码》是一个深受开发者欢迎的学习资源,特别针对那些希望深入理解J2EE(Java 2 Platform, Enterprise Edition)技术的初学者和有经验的程序员。jpetstore项目是一个示例应用,它展示了如何在...

    spring例子: jpetstore

    描述中的链接指向了ITEYE上的一篇博客文章,虽然内容没有给出,但通常这类博客会包含对JPetStore的详细解析,包括项目的结构、主要组件、配置文件的解读以及关键代码的解释。 标签 "源码" 暗示我们可以从JPetStore...

    JPetStore-5.0.zip_JPETSTO_jpetstore-5_jpetstore5_jpetstore5.0_jp

    《JPetStore-5.0:一个基于iBatis的开源电商示例解析》 JPetStore-5.0是一个著名的开源项目,它基于iBatis数据持久层框架,为开发者提供了一个完整的电子商务应用程序示例。这个项目由Apache Software Foundation...

    springMVC+mybatis+jpetstore工程源码

    【压缩包子文件的文件名称列表】"org.springframework.samples.jpetstore"暗示了项目结构,这通常包含Spring的包结构,表明源代码可能按照Spring的约定进行组织,同时也反映了jpetstore的模块化设计。 综上所述,这...

    jpetstore宠物店程序

    同时,项目中包含两个SQL文件,用于创建jpetstore所需的数据库表结构,部署时需要先导入这两个文件。 4. **Tomcat服务器** Tomcat是一个流行的开源Java Servlet容器,用于运行Java Web应用。jpetstore设计为部署在...

    jpetstore spring 的经典完整可直接运行的例子 jpetstore

    《基于jpetstore的Spring、iBatis与Struts整合实战》 jpetstore项目是Spring框架的一个经典示例,它全面展示了如何将Spring、iBatis和Struts这三个核心的Java Web技术进行集成,构建出一个完整的MVC(Model-View-...

    iBATIS JPetStore

    - **src/main/webapp**:Web应用的结构,包括WEB-INF目录下的web.xml(应用部署描述符)、JSP页面和其他静态资源。 - **pom.xml**:项目的Maven配置文件,定义了依赖和构建过程。 通过研究JPetStore,开发者可以...

    iBATIS_JPetStore-4.0.5

    这些脚本用于在数据库中初始化JPetStore所需的数据结构。通常,这些脚本会定义表、索引、视图等,并为应用程序提供数据存储的基础。 2. **devlib**:这个目录可能包含开发时所需的库文件,如JAR包,它们可能包括...

    jpetstore源码

    `jpetstore`通常会有一个清晰的目录结构,包含`src/main/java`(业务逻辑代码)、`src/main/resources`(配置文件)、`src/main/webapp`(Web应用资源)等。`src/main/webapp`下会有`WEB-INF`目录,其中包含`web....

    jpetstore.zip

    《SSM重构经典案例——jpetstore的转型之路》 jpetstore,作为MyBatis官方提供的一个示例项目,一直以来都是学习MyBatis的入门级案例。它以一个简单的宠物商店在线销售业务为背景,展示了数据库操作、数据绑定、...

    jpetstore-6.war

    使用了mybatis的jpetstore-6

    JPetStore (Struts + Spring + Hibernate)版

    **标题解析:** "JPetStore (Struts + Spring + Hibernate)版" 是一个基于Java技术的开源电子商务示例应用,它集成了Struts、Spring和Hibernate三个关键的开源框架。这个版本相较于之前的JPetStore5.0,进行了重要的...

    jpetstore4.0 (spring+struts+ibatis)

    《基于Spring、Struts和iBatis的jpetstore4.0详解》 jpetstore4.0是一款经典的电子商务示例应用,它采用Spring、Struts和iBatis这三个核心框架构建,展示了如何在Java环境下实现一个完整的MVC(Model-View-...

    JPetStore4.0.5

    《JPetStore4.0.5:Ibatis与Struts的经典结合》 JPetStore4.0.5是一个基于Java的开源电子商务应用,它展示了如何有效地利用Ibatis和Struts框架构建一个简单而实用的在线商店系统。这个版本在设计上保持了简洁性,...

Global site tag (gtag.js) - Google Analytics