`
l_walker
  • 浏览: 7043 次
  • 性别: 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入门代码项目

    Spring JDBC模块提供了一种更方便的方式来处理数据库操作,减少了大量模板代码,提高了代码的可读性和可维护性。 5. **Spring-05-Tx** 事务管理是企业级应用不可或缺的部分。Spring提供了强大的事务管理支持,无论...

    spring 入门示例代码

    1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,通过DI,Spring可以帮助管理对象之间的依赖关系,减少代码间的耦合。开发者无需手动创建对象,而是通过配置文件或注解来声明依赖关系。 2. **...

    SSH---Spring减少配置量将公共的配置进行抽象源码

    为了优化这种情况,Spring提供了多种方式来减少配置量并抽象出公共配置,提升代码的可读性和可维护性。 首先,我们可以利用Spring的组件扫描(Component Scanning)功能,通过注解(@Component, @Service, @...

    Spring源代码下载

    Spring大量使用了Java注解,如@Service、@Repository、@Controller等,减少了XML配置,使代码更加简洁和直观。 9. **Spring Security**: 提供了一套全面的安全管理框架,包括身份验证、授权等功能,为Web应用...

    spring原代码下载

    2. **注解驱动开发**:除了传统的XML配置,Spring 2.5开始大量支持注解,如@Service、@Repository、@Controller等,这让代码更加简洁,减少了XML配置文件的数量。同时,@Autowired注解实现了自动装配,极大地提高了...

    使用 Spring Boot 快速构建 Spring 框架应用

    其次,Spring Boot 提供了一个基础的 POM 文件模板,减少了 Maven 配置的复杂性。通过自动管理依赖关系,Spring Boot 可以确保引入的库版本与 Spring 框架和其他组件兼容,从而避免了版本冲突的问题。 在自动配置...

    孙哥说Spring5代码.zip

    Spring框架是Java开发中最广泛使用的轻量级框架,它提供了强大的依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,极大地简化了企业级应用的开发。下面我们将深入探讨Spring5中的关键知识点。 1. **...

    spring 整合JDBC 原创代码

    Spring JDBC为开发者提供了抽象层,可以避免直接使用传统的JDBC API,减少代码量,提高可读性和可维护性。它包含了模板类如JdbcTemplate和SimpleJdbcInsert,以及RowMapper和ResultSetExtractor等工具类,帮助处理...

    spring4最新源代码

    Spring4加强了对依赖注入(Dependency Injection,DI)的支持,使得配置更加灵活,同时也支持了基于注解的配置,减少了XML配置的使用。例如,@Component、@Service、@Repository和@Controller注解使得bean的声明更加...

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效...通过学习和实践这个示例,你不仅可以掌握如何在Spring Boot中使用Spring Batch,还能了解批处理的最佳实践,这对于处理大数据量的应用场景非常有价值。

    精通spring4.x代码

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序提供了一种模块化、可扩展的方法。Spring4.x版本是其发展过程中的一个重要里程碑,引入了许多新特性和改进,使得开发者能够更加高效地...

    spring2.5.6源代码及api

    6. **JDBC抽象层**:Spring的JDBC抽象层简化了数据库操作,减少了代码量并提高了可测试性。`JdbcTemplate`和`SimpleJdbcInsert`等类提供了便利的数据库访问功能。 7. **JMS(Java Message Service)**:Spring ...

    spring学习代码

    这个"spring学习代码"压缩包文件很可能是为了帮助初学者或者开发者更好地理解和掌握Spring框架的使用。 首先,Spring的核心概念是IoC,它将对象的创建和管理权交给了框架,而不是由应用自身来负责。这样可以减少...

    spring cloud全套学习代码

    Spring Cloud 的目标是让构建分布式系统变得更加简单,它集成了大量常用的分布式系统组件,提供了开箱即用的功能,大大减少了开发人员在系统集成上的工作量。 本套学习资料主要涵盖了以下几个核心知识点: 1. **...

    spring roo使用文档

    - **目标用户**:对于那些希望减少样板代码编写工作量、提高生产力的开发者来说非常有用。 #### 二、为什么选择 Spring Roo - **提高生产力**:通过自动化生成常见的代码结构,如实体类、控制器等,可以显著提高...

    Spring(一)为什么要使用spring

    3. **减少样板代码**:Spring MVC框架减少了大量HTTP请求处理中的重复代码,使得开发者更专注于业务逻辑。 4. **简化事务管理**:Spring的声明式事务管理使得事务处理更加简洁,降低了出错的可能性。 总的来说,...

    Spring4.0源代码

    Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,提供了全面的的企业级应用开发解决方案。Spring4.0版本...

    达内spring笔记代码

    - Spring JDBC模块简化了数据库操作,提供了一组模板类,如JdbcTemplate和NamedParameterJdbcTemplate,以减少重复代码。 - Spring支持编程式和声明式事务管理,通过TransactionTemplate和@Transactional注解实现...

    《精通Spring》源代码

    这样可以提高代码的可测试性和可维护性,减少对象间的耦合度。 3. **面向切面编程**:AOP是Spring用于解决横切关注点的一种方式,如日志记录、事务管理等。通过定义切面,可以将这些通用功能模块化,避免在业务代码...

    传智播客 spring2.5源代码_lib包

    这个"传智播客 spring2.5源代码_lib包"包含了Spring框架2.5版本的库文件,这些库文件对于理解Spring的工作原理、学习如何使用它以及进行相关开发非常有帮助。下面我们将深入探讨Spring 2.5的一些核心概念和功能。 1...

Global site tag (gtag.js) - Google Analytics