`
lwfshr
  • 浏览: 150467 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

read-jpetstore-2-进入jpetstore

阅读更多
进入JpetStore
Ø <a href="shop/index.do">
Ø Struts 中的配置
<action path="/shop/index" type="org.springframework.samples.jpetstore.web.struts.DoNothingAction"
               validate="false">
            <forward name="success" path="/WEB-INF/jsp/struts/index.jsp"/>
   </action>
Ø URL访问:
http://127.0.0.1:8080/jpetstore/shop/index.do

●     所有Action的基类BaseAction
/**
* JPetStore中所有Struts action 的基类。
* 它通过ServletContext查找Spring WebApplicationContext,
* 并且从WebApplicationContext获得PetStoreFacade的实现,使得子类通过protected的
* getter方法获得并调用PetStoreFacade。
*/

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;
   }
}

●     PetStoreFacade bean Spring定义
   Ø <bean id="petStore" parent="baseTransactionProxy">
        <property name="target">
<bean class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl">
                <property name="accountDao"><ref bean="accountDao"/></property>

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

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

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

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

           </bean>
       </property>
    </bean>

Ø在这使用了代理模式,所有的操作委托给PetStoreFacade,又PetStoreFacade再将具体操作委托给具体DAO。

public interface PetStoreFacade {
   Account getAccount(String username);
   Account getAccount(String username, String password);
    void insertAccount(Account account);
   void updateAccount(Account account);
   List getUsernameList();
   List getCategoryList();
   Category getCategory(String categoryId);
   List getProductListByCategory(String categoryId);
   List searchProductList(String keywords);
    Product getProduct(String productId);
    List getItemListByProduct(String productId);
    Item getItem(String itemId);
    boolean isItemInStock(String itemId);
    void insertOrder(Order order);
    Order getOrder(int orderId);
    List getOrdersByUsername(String username);
}

Ø PetStoreImpl类

这个类为我们提供了5个DAO对象,它减弱了对具体的持续化API的依赖,以此,虽然Jpetstore使用了iBATIS作为持续化的数据对象控制,但是,也可以使用其他的对象映射工具替代iBATIS,而做这些改动时,不需要改变PetStoreImpl类。

DAOs通过Spring提供的依赖注入功能,使得这些DAOs对Jpetstore可用,在这里使用Setter注入方法,Getter方法时可选的,但你也可以任意的扩展。

PetStoreImpl在JPetStore中只有一个实例对象,用Spring的术语来说,它是一个单例对象。

在Spring中的单例对象不需要像传统的单例设计模式中那样,提供私有的构造函数,静态工厂方法等实现。只需要简单的申明配置就好,其他的交给Spring去做。

PetStoreImpl是一个简单的POJO,它不依赖任何的Spring APIs,即便不在Spring容器中,它也可以正常的使用。

PetStoreImpl类为所有的方法定义了一个默认的事务管理属性。该属性只有在使用Commons Attributes autoproxying时才会被用到,而对于TransactionFactoryProxyBean的使用则要求你提供任何附加的属性定义,只是使用就好了。

public class PetStoreImpl implements PetStoreFacade, OrderService {
   //JPetStore涉及到的主要的DAO对象
  private AccountDao accountDao;
   private CategoryDao categoryDao;
    private ProductDao productDao;
    private ItemDao itemDao;
    private OrderDao orderDao;

   public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
   }

    public void setCategoryDao(CategoryDao categoryDao) {
        this.categoryDao = categoryDao;
    }

    public void setProductDao(ProductDao productDao) {
        this.productDao = productDao;
    }

   public void setItemDao(ItemDao itemDao) {
      this.itemDao = itemDao;
    }

    public void setOrderDao(OrderDao orderDao) {
        this.orderDao = orderDao;
    }

    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);
    }

    public List getUsernameList() {
        return this.accountDao.getUsernameList();
   }

   public List getCategoryList() {
        return this.categoryDao.getCategoryList();
    }

   public Category getCategory(String categoryId) {
       return this.categoryDao.getCategory(categoryId);
    }

    public List getProductListByCategory(String categoryId) {
       return this.productDao.getProductListByCategory(categoryId);
    }

    public List searchProductList(String keywords) {
        return this.productDao.searchProductList(keywords);
   }

    public Product getProduct(String productId) {
        return this.productDao.getProduct(productId);
   }

    public List getItemListByProduct(String productId) {
        return this.itemDao.getItemListByProduct(productId);
    }

    public Item getItem(String itemId) {
       return this.itemDao.getItem(itemId);
    }

    public boolean isItemInStock(String itemId) {
        return this.itemDao.isItemInStock(itemId);
   }

    public void insertOrder(Order order) {
        this.orderDao.insertOrder(order);
        this.itemDao.updateQuantity(order);
   }

    public Order getOrder(int orderId) {
        return this.orderDao.getOrder(orderId);
    }

    public List getOrdersByUsername(String username) {
       return this.orderDao.getOrdersByUsername(username);
   }
}


分享到:
评论

相关推荐

    iBatis-JPetStore-5.0

    在本教程中,我们将通过“iBatis-JPetStore-5.0”项目来深入理解iBatis的核心概念和功能。 **1. iBatis概述** iBatis是一个轻量级的ORM(对象关系映射)框架,它的主要目标是简化Java应用中的数据库操作。它不完全...

    Spring源码学习-JPetStore.part3

    spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包

    Spring源码学习-JPetStore.part2

    spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导 入eclipse中运行。共3个压缩包

    spring-boot-jpetstore:基于Doma 2和Spring Boot构建的示例Web应用程序

    克隆git clone https://github.com/domaframework/spring-boot-jpetstore.git跑cd spring-boot-jpetstore./gradlew bootRun使用权http://localhost:8080/编辑IntelliJ IDEA 将此示例导入​​为Gradle项目。蚀用...

    Spring源码学习-JPetStore.part1

    spring自带的JPetStore,我已经配置好(数据库也配置好,用的是hsqldb),可以直接导入eclipse中运行。共3个压缩包

    JPetStore-5.0.zip_JPETSTO_jpetstore-5_jpetstore5_jpetstore5.0_jp

    此外,JPetStore-5.0还利用了Struts2作为前端控制器,处理HTTP请求,并转发到相应的Action。Action类实现了业务逻辑,调用Service层的方法,最终返回一个Result,用于渲染视图。视图部分通常由JSP页面组成,它们结合...

    mybatis-spring-boot-jpetstore:基于MyBatis 3,Spring Boot和Thymeleaf 3构建的示例Web应用程序

    mybatis-spring-boot-jpetstore 该示例是一个基于MyBatis,Spring Boot(Spring MVC,Spring Security)和Thymeleaf的Web应用程序。 这是MyBatis JPetStore示例应用程序( )的另一种实现。 原始应用程序可在...

    MyBatis学习范例宠物商店jpetstore6

    MyBatis学习范例宠物商店jpetstore6 内容为: mybatis-jpetstore-6.0.0-sources.jar mybatis-jpetstore-6.0.0.war 学习MyBatis一定要看的sample。

    jpetstore-6.war

    使用了mybatis的jpetstore-6

    jpetstore-3-1-1

    【jpetstore-3-1-1】是一个开源的电子商务示例应用,它展示了如何使用Java技术栈构建一个在线宠物商店。这个项目以其简洁的架构和对多种数据库的支持而受到关注,尤其适合初学者和开发者了解Java Web应用程序的开发...

    jpetstore

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

    jpetstore4.0 (spring+struts+ibatis)

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

    iBATIS_JPetStore-4.0.5

    iBATIS_JPetStore-4.0.5 是一个基于Java的开源示例项目,它展示了如何使用iBATIS框架来构建一个完整的电子商务应用程序。iBATIS是一个数据映射框架,它简化了Java应用程序与数据库之间的交互,允许将SQL查询直接嵌入...

    jpetstore-4.0.3.zip_JPetStore 4_JPetStore.zip_JpetStore 4.0 _jpe

    标题中的"jpetstore-4.0.3.zip"表明我们正在讨论的是JPetStore的4.0.3版本。 **核心技术栈** 1. **Struts框架**:作为MVC设计模式的实现,Struts负责处理HTTP请求,管理视图和控制逻辑。它将业务逻辑与表示层分离...

    jpetstore系统架构图

    《深入解析jpetstore系统架构图:从设计到实现》 在IT行业的软件开发领域,jpetstore系统作为一款开源的网上宠物商店示例应用程序,以其清晰的分层架构、强大的功能性和高度可扩展性而著称。尤其在jpetstore5.0版本...

    JPetStore-5.0

    "JPetStore-5.0" 是一个基于STRUTS2框架实现的在线宠物商店示例应用。这个项目旨在提供一个学习和演示STRUTS2框架功能的实例,让开发者能够更好地理解和掌握STRUTS2在实际开发中的应用。 **STRUTS2框架详解** ...

    jpetstore开源学习代码

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

    学习Spring 的例子JpetStore

    《Spring框架学习:以JpetStore为例》 Spring框架是Java企业级应用开发中的核心框架,它为开发者提供了丰富的功能,简化了开发流程,提高了代码的可测试性和可维护性。JpetStore作为Spring的经典示例项目,是学习...

Global site tag (gtag.js) - Google Analytics