`
l_walker
  • 浏览: 6844 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用Spring减少代码量

阅读更多
http://www.skyinn.org/wiki/Wiki.jsp?page=Java_blogentry_270704_1

在使用Spring之前,DAO的配置、初始化、获取、释放等都需要自己写,
将近11个类或接口,量比较大,关系复杂,尚未包括配置文件处理、ThreadLocal、Filter等等




原来的DAOFactory,这还将DAO的配置信息由别的模块处理了的



001 /* =============================================
002  * $Id: DAOFactory.java,v 1.4 2003/10/20 14:18:44 l_walker Exp $
003  * Created on [2003-10-8 22:48:12] by l_walker
004  * =============================================
005  * The Skyinn Software License v1.0
006  * ===============================================
007  */
008 package org.skyinn.quasar.dao;
009
010 import org.apache.commons.collections.FastHashMap;
011 import org.apache.commons.logging.Log;
012 import org.apache.commons.logging.LogFactory;
013 import org.skyinn.quasar.config.ApplicationConfiguration;
014 import org.skyinn.quasar.util.StringUtil;
015
016
017 /**
018  * <p>DAO工厂类。</p>
019  *
020  * @author $Author: l_walker $
021  * @version $Revision: 1.4 $ $Date: 2003/10/20 14:18:44 $
022  */
023 public class DAOFactory {
024     //~ Static fields/initializers =============================================
025
026     /**DAOFactory singleton instance.*/
027     private static DAOFactory instance = new DAOFactory();
028
029     //~ Instance fields ========================================================
030
031     /** Logging */
032     private Log log = LogFactory.getLog (this.getClass ());
033
034     /**DAO pool.*/
035     protected FastHashMap daos = new FastHashMap();
036
037     /**DAO configuration.*/
038     protected DAOConfig daoConfig = null;
039
040     //~ Constructors ===========================================================
041
042     /**
043      * Default Construtor.
044      */
045     private DAOFactory () {
046         super();
047         daoConfig = ApplicationConfiguration.getInstance().getDAOConfiguration();
048     }
049
050     //~ Methods ================================================================
051
052     /**
053      * 取DAO工厂,Singleton模式以确保系统中只有一个DAOFactory实例。
054      *
055      * @return DAO工厂实例
056      */
057     public static synchronized DAOFactory getInstance () {
058         if (null == instance) {
059             instance = new DAOFactory();
060         }
061         return instance;
062     }
063
064     /**
065      * 从DAO池中取对应KEY的DAO实例。
066      * 若该实例未存在,则从DAO配置中取该DAO的Mapping,并从中取该DAO的实现类的类名,
067      * 初始化之并将其置入池中缓存。
068      *
069      * @param key
070      * @return
071      * @throws DAOException
072      */
073     public synchronized DAO findDAOByKey (final String key)
074         throws DAOException {
075         //TODO:DAO实例是在初始化时全部创建一边还是在每次被调用时才创建???
076         //get dao instance from dao pool
077         DAO daoInstance = (DAO) daos.get (key);
078
079         //get dao mapping
080         final DAOMapping daoMapping = daoConfig.findDAOMapping (key);
081
082         //if null or different type bewteen the current dao and it's mapping
083         if ((null == daoInstance) ||
084                 !daoInstance.validateType (daoMapping.getCurrentType ())) {
085             try {
086                 final String daoImplClass =
087                     daoMapping.findDAOImplClass (daoMapping.getCurrentType ());
088
089                 if (StringUtil.isNullOrEmpty (daoImplClass)) {
090                     throw new DAOException("Not found DAO implement class of:[" +
091                         daoMapping + "]");
092                 }
093
094                 //new instance
095                 Class clazz = Class.forName (daoImplClass);
096                 daoInstance = (DAO) clazz.newInstance ();
097
098                 //set current type
099                 daoInstance.setCurrentType (daoMapping.getCurrentType ());
100
101                 //add to dao pool
102                 daos.setFast (false);
103                 daos.put (key, daoInstance);
104                 daos.setFast (true);
105
106                 if (log.isDebugEnabled ()) {
107                     log.debug ("A DAO instance created:[" + key + "]");
108                 }
109             } catch (ClassNotFoundException e) {
110                 log.error ("ClassNotFoundException:" + e.getMessage());
111                 throw new DAOException(e);
112             } catch (InstantiationException e) {
113                 log.error ("InstantiationException:" + e.getMessage());
114                 throw new DAOException(e);
115             } catch (IllegalAccessException e) {
116                 log.error ("IllegalAccessException:" + e.getMessage());
117                 throw new DAOException(e);
118             }
119         }
120         return daoInstance;
121     }
122 }



相应的配置文件:

01   <!-- Services -->
02   <services>
03     <service name="ACLService" className="org.skyinn.quasar.acl.ACLService"/>
04   </services>
05
06   <!--DAO Mappings-->
07   <dao-mappings>
08     <dao key="org.skyinn.quasar.acl.dao.UserDAO1" currentType="hibernate">
09       <dao-impl type="hibernate" implClass="org.skyinn.quasar.acl.dao.hibernate.UserDAOHibImpl"/>
10     </dao>
11   </dao-mappings>





--------------------------------------------------------------------------------
而现在在使用了spring之后,只定义了三个类或接口:

DAO DAO接口
DAOException 异常
HibernateDAO Hibernate dao 基类,

而且相应的代码不到100行:

01 /* =====================================================================
02  * $Id: HibernateDAO.java,v 1.1 2004/07/26 14:38:22 l_walker Exp $
03  *
04  * Created: [2004-7-25 0:03:47] by l_walker
05  * =====================================================================*/
06 package org.skyinn.quasar.dao;
07
08 import java.util.List;
09
10 import org.skyinn.quasar.common.PersistentObject;
11 import org.springframework.orm.hibernate.support.HibernateDaoSupport;
12
13 /**
14  * <p>HibernateDAO.java</p>
15  *
16  * <p>
17  * <a href="HibernateDAO.java.java.html"><i>View Source</i></a>
18  * </p>
19  *
20  * @author $Author: l_walker $
21  * @version $Reversion$ $Date: 2004/07/26 14:38:22 $
22  */
23 public class HibernateDAO extends HibernateDaoSupport implements DAO {
24   private static final String KEY = "HibernateDAO";
25
26   public PersistentObject createObject(PersistentObject obj) {
27     return (PersistentObject) this.getHibernateTemplate().save(obj);
28   }
29
30   public void updateObject(PersistentObject obj) {
31     this.getHibernateTemplate().update(obj);
32   }
33
34   public void deleteObject(PersistentObject obj) {
35     this.getHibernateTemplate().delete(obj);
36   }
37   public void deleteObjectById(Class clazz, long id) {
38     PersistentObject obj =
39       (PersistentObject) this.getHibernateTemplate().load(
40         clazz,
41         new Long(id));
42     if (null != obj) {
43       this.getHibernateTemplate().delete(obj);
44     }
45   }
46
47   public PersistentObject retriveObjectById(Class clazz, long id) {
48     return (PersistentObject) this.getHibernateTemplate().load(
49       clazz,
50       new Long(id));
51   }
52    
53     public List listAll(Class clazz){
54         return this.getHibernateTemplate().loadAll(clazz);
55     }
56    
57    
58 }



session管理、事务等等都交由spring去处理,确实省事不少。
分享到:
评论

相关推荐

    Spring Security详细介绍及使用含完整代码(值得珍藏)

    该框架充分利用了Spring IoC、DI(依赖注入)和AOP(面向切面编程)等核心功能,通过一组可配置的Bean,为应用系统提供声明式的安全访问控制,从而减少了为企业系统安全控制编写大量重复代码的工作量。 Spring ...

    SpringSecurity.zip

    充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的...

    Spring Security、Spring Social 、Spring Security OAuth

    本教程是全网最细致地讲解Spring Security、Spring Social 、Spring Security OAuth三种技术开发安全的REST服务,彻底掌握一线互联网公司主流的身份认证和授权方式...减少了为企业系统安全控制编写大量重复代码的工作。

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...

    Spring Boot 2.0培训.pdf

    创建独立的Spring 应用程序; • 嵌入的Tomcat 、Jetty 或者Undertow ,无须部署WAR 文件: . 允许通过Maven 来根据需要获取starter;...大自动化配置,大量使用自动配置,使得开发者对Spring 的配置尽量减少:此

    Spring Boot中使用Swagger2构建强大的RESTful API文档

    它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明。另外Swagger2也提供了强大的页面测试功能来调试每个...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    3、spring jdbc:小巧,灵活,足够优秀,个人比较喜欢使用,但是代码量偏大,原生的接口重复劳动量大,比如insert、mapper之类的; SBORM只是针对spring jdbc的一些不方便的地方,做了一些封装,更加简化日常的...

    Spring开发指南

    代码将比不使用SPRING优雅 代码可读性强 公用资源可插拔 由于大量类在XML中配置,因此象datasource,事务管理,可以在不需要修改程序的情况下,修改配置就可以更换 业务逻辑类,DAO可插拔 无侵入性的系统 不是全用...

    Struts2+Spring+JPA框架的代码生成器

    Struts2+Spring+JPA框架的代码生成器,填入数据库链接、存放路径和jar包路径,程序自动将代码生成至指定地方,减少代码的编辑量。

    Spring_Security_3.1.4_API CHM格式

    充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。 从之前发布其他chm文件下载用户的反映看...

    SpringSecurity实战教程.txt

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用...减少了为企业系统安全控制编写大量重复代码的工作。

    Spring Security

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用...减少了为企业系统安全控制编写大量重复代码的工作。

    Spring Boot Mybatis使用详解含示例(值得珍藏)

    简化数据库操作:MyBatis 简化了 JDBC 代码的编写,减少了手动设置参数和获取结果集的工作量。 支持事务管理:MyBatis 可以与 Spring 框架集成,利用 Spring 的事务管理功能,确保数据的完整性和一致性。 缓存机制:...

    Spring Boot 微信小程序 MyBatis 代码

    绿植通过自身的光合作用释放大量氧气,增加空气中的含氧量,打造家居天然养吧,但由于许多人没有养殖经验或者时间安排的不足,导致养殖效果不够明显。 因此设计一款基于微信小程序的“绿植养殖指南”系统,录入各种...

    SpringBoot面试题.zip

    帮助我们以最少的工作量,更加健壮地使用现有的 Spring 功能。 问题二 Spring Boot 有哪些优点? Spring Boot 的优点有: 减少开发,测试时间和努力。 使用 JavaConfig 有助于避免使用 XML。 避免大量的 Maven 导入...

    spring-security-4.2.5.RELEASE-source.zip

    Spring Security 4.2.5是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,...减少了为企业系统安全控制编写大量重复代码的工作。

    ssh框架整合step by step (springMVC + spring 5.0.4 + hibernate 5.0.12)

    # 使用entity/dao/service全部使用注解扫描, 大大减少再开发的代码量; # 事务的织入: 开发时不必再处理SessionFactory、Session等, 只要按配置文件指定的格式对方法进行命名, 即可自动开启/提交事务; # 做了BaseDao...

    spring-boot-mybatis-plus数据层框架

    代码生成器:MyBatis-Plus还提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口以及XML配置文件,这可以大幅减少手动编写这些代码的工作量。 综上所述,Spring Boot整合MyBatis-Plus作为数据层...

    基于SpringBoot的代码生成器的设计和实现.doc

    本文在基于减少Java Web开发者代码编写量的需求上,使用Java EE技术和Spring Boot框架设计了一个B/S模式的代码生成器系统。本设计包含了以下3个主要内容:1. 用户对数据库的实体模型进行设计和管理;2. 系统根据实体...

    spring-security-samples-tutorial 源码实例

    Spring Security是一个能够为基于Spring的...充分利用了Spring IoC(依赖注入,也称控制反转)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

Global site tag (gtag.js) - Google Analytics