虽然对
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物理分层架构解析与实践》 在软件开发领域,良好的架构设计是项目成功的关键。"jpetstore物理分层demo"是一个展示如何实施分层架构的实例,虽然其中存在一些小bug,但它为我们提供了一个学习和理解分层...
在IT行业的软件开发领域,jpetstore系统作为一款开源的网上宠物商店示例应用程序,以其清晰的分层架构、强大的功能性和高度可扩展性而著称。尤其在jpetstore5.0版本中,其系统架构图详细展示了系统的各个组成部分...
**jpetstore** 是一个由Sun Microsystems公司开发的开源Web应用程序示例,它是一个基于Java技术的网上宠物商店。这个项目被设计成一个简单的“Hello, World”式的Web应用,用以展示Java技术和相关的框架在构建电子...
《Spring框架学习:以JpetStore为例》 Spring框架是Java企业级应用开发中的核心...在学习过程中,我们不仅要理解代码的结构和逻辑,还要思考这些设计背后的原理和最佳实践,以便在自己的项目中发挥Spring的最大价值。
《jpetstore开源学习代码》是一个深受开发者欢迎的学习资源,特别针对那些希望深入理解J2EE(Java 2 Platform, Enterprise Edition)技术的初学者和有经验的程序员。jpetstore项目是一个示例应用,它展示了如何在...
描述中的链接指向了ITEYE上的一篇博客文章,虽然内容没有给出,但通常这类博客会包含对JPetStore的详细解析,包括项目的结构、主要组件、配置文件的解读以及关键代码的解释。 标签 "源码" 暗示我们可以从JPetStore...
《JPetStore-5.0:一个基于iBatis的开源电商示例解析》 JPetStore-5.0是一个著名的开源项目,它基于iBatis数据持久层框架,为开发者提供了一个完整的电子商务应用程序示例。这个项目由Apache Software Foundation...
【压缩包子文件的文件名称列表】"org.springframework.samples.jpetstore"暗示了项目结构,这通常包含Spring的包结构,表明源代码可能按照Spring的约定进行组织,同时也反映了jpetstore的模块化设计。 综上所述,这...
同时,项目中包含两个SQL文件,用于创建jpetstore所需的数据库表结构,部署时需要先导入这两个文件。 4. **Tomcat服务器** Tomcat是一个流行的开源Java Servlet容器,用于运行Java Web应用。jpetstore设计为部署在...
《基于jpetstore的Spring、iBatis与Struts整合实战》 jpetstore项目是Spring框架的一个经典示例,它全面展示了如何将Spring、iBatis和Struts这三个核心的Java Web技术进行集成,构建出一个完整的MVC(Model-View-...
- **src/main/webapp**:Web应用的结构,包括WEB-INF目录下的web.xml(应用部署描述符)、JSP页面和其他静态资源。 - **pom.xml**:项目的Maven配置文件,定义了依赖和构建过程。 通过研究JPetStore,开发者可以...
这些脚本用于在数据库中初始化JPetStore所需的数据结构。通常,这些脚本会定义表、索引、视图等,并为应用程序提供数据存储的基础。 2. **devlib**:这个目录可能包含开发时所需的库文件,如JAR包,它们可能包括...
`jpetstore`通常会有一个清晰的目录结构,包含`src/main/java`(业务逻辑代码)、`src/main/resources`(配置文件)、`src/main/webapp`(Web应用资源)等。`src/main/webapp`下会有`WEB-INF`目录,其中包含`web....
《SSM重构经典案例——jpetstore的转型之路》 jpetstore,作为MyBatis官方提供的一个示例项目,一直以来都是学习MyBatis的入门级案例。它以一个简单的宠物商店在线销售业务为背景,展示了数据库操作、数据绑定、...
使用了mybatis的jpetstore-6
**标题解析:** "JPetStore (Struts + Spring + Hibernate)版" 是一个基于Java技术的开源电子商务示例应用,它集成了Struts、Spring和Hibernate三个关键的开源框架。这个版本相较于之前的JPetStore5.0,进行了重要的...
《基于Spring、Struts和iBatis的jpetstore4.0详解》 jpetstore4.0是一款经典的电子商务示例应用,它采用Spring、Struts和iBatis这三个核心框架构建,展示了如何在Java环境下实现一个完整的MVC(Model-View-...
《JPetStore4.0.5:Ibatis与Struts的经典结合》 JPetStore4.0.5是一个基于Java的开源电子商务应用,它展示了如何有效地利用Ibatis和Struts框架构建一个简单而实用的在线商店系统。这个版本在设计上保持了简洁性,...