- 浏览: 117663 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (63)
- struts (7)
- spring (12)
- Hibernate (14)
- struts+spring+hibernate (11)
- Ajax (1)
- DWR (0)
- JSON (0)
- Junit (0)
- Lucene (15)
- Compass (0)
- Tomcat(Jsp) (0)
- MySql (0)
- JavaScript (0)
- Html (0)
- UML (0)
- Log4j (0)
- Ant (0)
- Acegi (0)
- (My)eclipse (0)
- java2 (0)
- Jakarta Commons (0)
- java Web (0)
- Ruby (0)
- Ruby On Rails (0)
- IBatis (0)
- 版本控制 (0)
- eXtremeComponents (0)
- SiteMesh (0)
- IT相关 (0)
- 电子商务 (0)
- 随笔 (0)
- 正则表达式 (0)
- 测试资料 (0)
- 个人收藏 (0)
- 开发经验 (0)
- 名词解释(java,j2ee) (1)
- 英语 (0)
- java规则引擎 (0)
- CMS系统 (0)
- XML操作 (0)
- jvm (0)
- 开源工具收集 (0)
- webService (2)
最新评论
-
锦毛鼠:
请问下您现在有没有这个demo啊?可以发我看看吗?
cxf webservice身份验证 -
z276356445t:
LZ,你写的类文件怎么和配置文件中的不一样呢,求解.
spring 定时器 -
j2eeli:
感谢共享!
spring 定时器 -
gimy:
写的很清楚,谢谢!
Spring-MultiActionController -
valgrind:
Exception in thread "main& ...
Lucene中文分词组件 JE-Analysis 1.4.0
来源:http://www.gpowersoft.com/tech/Spring/45.htm
Spring Framework从诞生之日起,受到了越来越多的关注。最近,新的开源项目大多支持Spring Framework。国内目前也有专门的网站(http://spring.jactiongroup.net/)。那它为什么如此受欢迎呢?
我想最重要的是,EJB让每个人都痛恨。要编写一个EJB,需要写LocalHome, RemoteHome, Bean, LocalInterface, RemoteInterface,需要一个标准描述符,一个特殊厂商描述符(Weblogic、WebSphere都不一样),如果是Entity Bean,还需要Mapping文件。如此之多,实在麻烦。但EJB最重要的是解决Transaction问题,没有Spring之前,没有其他方法能够描述式的解决它。每个人、每个公司为了解决Transaction的问题,编程的写法都不一样,百花齐放。于是,在最需要它的时候,Spring出现了。
Spring的功能非常多。但对于一个产品,最重要的是如何用好它的精华。Spring包含AOP、ORM、DAO、Context、Web、MVC几个部分组成。Web、MVC暂不用考虑,用成熟的Struts、JSP或Webwork更好。DAO由于目前Hibernate、JDO的流行,也可不考虑。因此最需要用的是AOP、ORM、Context。
Context中,最重要的是Beanfactory,它是将接口与实现分开,非常重要。以前我们写程序,如一个接口IDocument,一个实现类Document1。在写程序时,需写成IDocument doc = new Document1(),一旦我们的实现类需改变时,变为Document2,则程序需写成IDocument doc = new Document2(),所有用到的地方全需改。Beanfactory帮我们解决了这个问题,用context后,写法变为IDocument doc=(IDocument)beanFactory.getBean("doc")。如果实现类从Document1改为Document2,直接在配置文件改就可以了。Context是Bean factory的进一步抽象。很多人都喜欢用ApplicationConext,用Servlet把它Load。这样就把Bean Factory与Web绑定在一起。如果是Fat Client或Remote调用,则这些Bean factory就很难调用,实际是将表现层与业务层绑定的太紧。推荐的方法是SingletonBeanFactoryLocator。具体为:
BeanFactoryLocator bfLocator = SingletonBeanFactoryLocator.getInstance();
BeanFactoryReference bf = bfLocator.useBeanFactory("beanFactory");
// now use some bean from factory
return bf.getFactory().getBean(name);
<beans>
<bean id="beanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>dataAccessContext.xml</value>
<value>securityContext.xml</value>
<value>...</value>
</list>
</constructor-arg>
</bean>
</beans>
这样,就可随时动态扩展,实现组件式的开发。
Spring Framework最得以出名的是与Hibernate的无缝链接,基本上用Spring,就会用Hibernate。可惜的是Spring提供的HibernateTemplate功能显得不够,使用起来也不是很方便。我们编程序时,一般先写BusinessService,由BusinessService调DAO来执行存储,在这方面Spring没有很好的例子,造成真正想用好它,并不容易。
我们的思路是先写一个BaseDao,仿照HibernateTemplate,将基本功能全部实现:
public class BaseDao extends HibernateDaoSupport{
private Log log = LogFactory.getLog(getClass());
public Session openSession() {
return SessionFactoryUtils.getSession(getSessionFactory(), false);
}
public Object get(Class entityClass, Serializable id) throws DataAccessException {
Session session = openSession();
try {
return session.get(entityClass, id);
}
catch (HibernateException ex) {
throw SessionFactoryUtils.convertHibernateAccessException(ex);
}
}
public Serializable create(Object entity) throws DataAccessException {
Session session = openSession();
try {
return session.save(entity);
}
catch (HibernateException ex) {
throw SessionFactoryUtils.convertHibernateAccessException(ex);
}
}
...
其它的DAO,从BaseDao继承出来,这样写其他的DAO,代码就会很少。
从BaseDao继承出来EntityDao,专门负责一般实体的基本操作,会更方便。
public interface EntityDao {
public Object get(Class entityClass, Serializable id) throws DataAccessException;
public Object load(Class entityClass, Serializable id) throws DataAccessException;
public Serializable create(Object entity) throws DataAccessException;
...}
/**
* Base class for Hibernate DAOs. This class defines common CRUD methods for
* child classes to inherit. User Sping AOP Inteceptor
*/
public class EntityDaoImpl extends BaseDao implements EntityDao{
}
为了Transaction的控制,采用AOP的方式:
public interface EntityManager {
public Object get(Class entityClass, Serializable id);
public Object load(Class entityClass, Serializable id);
public Serializable create(Object entity);
...
}
/**
* Base class for Entity Service. User Sping AOP Inteceptor
*/
public class EntityManagerImpl implements EntityManager {
private EntityDao entityDao;
public void setEntityDao(EntityDao entityDao) {
this.entityDao = entityDao;
}
public Object get(Class entityClass, Serializable id) {
return entityDao.get(entityClass, id);
}
public Object load(Class entityClass, Serializable id) {
return entityDao.load(entityClass, id);
}
...
}
这样我们就有了一个通用的Hibernate实体引擎,可以对任何Hibernate实体实现基本的增加、修改、删除、查询等。
其它的BusinessService就可以继承EntityManager,快速实现业务逻辑。
具体XML配置如下:
<!-- Oracle JNDI DataSource for J2EE environments -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"><value>java:comp/env/jdbc/testPool</value></property>
</bean>
<!-- Hibernate SessionFactory for Oracle -->
<!-- Choose the dialect that matches your "dataSource" definition -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource"/></property>
<property name="mappingResources">
<value>user-hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.Provider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.show_sql">false</prop>
</props>
</property>
</bean>
<!-- AOP DAO Intecepter -->
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="entityDaoTarget" class="com.gpower.services.entity.dao.EntityDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="entityDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.gpower.services.entity.dao.EntityDao</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
<value>entityDaoTarget</value>
</list>
</property>
</bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<!-- Transaction manager that delegates to JTA (for a transactional JNDI DataSource) -->
<!--
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
-->
<!-- Transactional proxy for the Application primary business object -->
<bean id="entityManagerTarget" class="com.gpower.services.entity.EntityManagerImpl">
<property name="entityDao">
<ref bean="entityDao"/>
</property>
</bean>
<bean id="entityManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="target">
<ref bean="entityManagerTarget"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_SUPPORTS</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
发表评论
-
Spring-MultiActionController
2007-09-27 13:50 4306如果为每个请求都设计一个controller的话,随着开发的进 ... -
spring 定时器
2007-09-27 13:49 13772先来看配置文件 <?xml version=" ... -
Spring 對 Lob 的支援...
2007-09-27 13:49 1181如果要將 將檔案存入資料庫,我們在JDBC中可以使用CLOB與 ... -
深入Spring MVC framework之总体分析
2007-09-27 13:47 779在当今的MVC framework里,似乎Webwork2逐渐 ... -
Spring MVC框架的高级配置
2007-09-27 13:46 1086人们经常会在一台以上 ... -
Spring 网站资源
2007-09-27 13:45 2542Spring英文资源 Spring官方网站 http:/ ... -
使用 Spring 更好地处理 Struts 动作
2007-09-27 13:44 875您肯定已经听说过控制反转 (IOC) 设计模式,因为很长一段时 ... -
Spring技巧之活用FactoryBean
2007-09-27 13:42 712Spring中有两种类型的Bean,一种是普通Bean,另一种 ... -
Spring2.0技巧系列之简洁配置
2007-09-27 13:38 971Spring2.0在配置上调整了不少地方,增加更加灵活、简洁的 ... -
Spring2.0中新的Bean类型实现原理
2007-09-27 13:36 1021作者:出处:blog责任编辑: 方舟 我们知道,在Sprin ... -
Spring XML配置十二个最佳实践
2007-09-27 12:57 923在这篇文章里,对于Spring XML的配置,我将向你展示12 ...
相关推荐
通过阅读源码,可以学习到设计模式、最佳实践以及如何编写高质量的Java代码。同时,对于想要自定义或扩展Spring功能的开发者,源码分析也极具价值。 总的来说,Spring Framework v6.1.4是一个强大的工具,不仅提供...
在下载并解压"spring-framework-5.3.32"后,开发者通常会查看源码,了解其内部工作原理,学习最佳实践,或者用于毕业设计项目中,以掌握现代企业级Java应用开发的核心技术。同时,这个版本的更新日志可能会包含重要...
在 5.3.8 版本中,测试工具和库可能已经升级,以适应新的测试框架和最佳实践。 8. **模块化**:Spring Framework 5.3.8 继续沿用了模块化设计,允许开发者根据需求选择引入必要的模块,降低项目的体积和启动时间。 ...
通过对Spring Framework 5.3.4源码的深入学习,开发者不仅可以提升自己的技术能力,还能了解到更多设计原则和最佳实践。这将有助于在实际项目中编写出更高效、可维护的代码,同时也能更好地参与到Spring社区的发展中...
《Spring Framework 5.3.20:深度解析与应用...无论是传统的MVC模式,还是新兴的反应式编程,都能在Spring的怀抱中找到最佳实践。通过深入了解和熟练掌握Spring,开发者能够创建出高效、灵活且易于维护的企业级应用。
对于学习和理解Spring框架的用法、配置以及最佳实践至关重要。通过阅读这些文档,开发者可以了解到Spring的核心概念、模块结构、配置方式以及如何将Spring集成到实际项目中。 2. **libs文件夹**:包含了一系列的jar...
对于更现代的应用场景,Spring 4.1.0的英文参考文档(spring-framework-reference(4.1.0).pdf)会是宝贵的资源,它详细介绍了框架的高级特性和最佳实践。 在实际项目中,可以逐步学习并实践Spring MVC、数据访问、...
通过学习和实践Spring Framework 5.3.6,开发者可以掌握现代Java应用开发的最佳实践,包括模块化架构、声明式编程、反应式编程等。同时,Spring的广泛生态系统,如Spring Boot、Spring Cloud等,为构建微服务架构...
Spring Framework 5.3.3 是一个广泛应用的Java企业级应用程序开发框架,它以其模块化设计、灵活性和强大的功能而闻名。...总的来说,Spring Framework 5.3.3 是一个强大且全面的工具集,是Java开发者的首选框架之一。
Spring Framework 是一个广泛使用的Java应用程序开发框架,它提供了一个全面的编程和配置模型,促进了良好的编程实践和结构化的应用开发。...同时,这也是一次学习设计模式、编程原则和最佳实践的好机会。
《Spring Framework 5.1.4源码深度解析》 Spring Framework是Java开发中的核心框架,它为构建高质量的企业级应用提供了全面的...通过深入研究源码,我们可以学习到软件设计的最佳实践,提升我们的编程技巧和架构能力。
无论是对框架内部机制的探究,还是对最佳实践的学习,都能从源码中找到答案。因此,对于任何致力于提升自身技术水平的Java开发者来说,Spring Framework 5.2.25.RELEASE的源码分析都是一个不容错过的学习资源。
这些文档是开发者学习和理解Spring功能、最佳实践以及如何解决常见问题的重要资源。通过阅读文档,开发者可以深入了解Spring MVC、数据访问、事务管理、测试等模块的使用方法。 "spring-framework-4.3.18.RELEASE-...
Spring Framework是中国广大Java开发者在进行企业级应用开发时不可或缺的框架工具。该框架以其轻量级、模块...开发者可以通过阅读这份文档,深入学习Spring的各种特性和最佳实践,从而提升其在Java开发领域的专业技能。
深入研究Spring Framework 5.0.2.RELEASE的源码,开发者可以了解其实现细节,学习如何利用设计模式来构建可扩展和灵活的应用,同时也能掌握Java世界中的最佳实践。源码阅读有助于提升开发者的技术深度,为解决复杂...
6. **文档资源**:压缩包内的`spring-framework-5.0.19.RELEASE-docs.zip`包含了详尽的官方文档,帮助开发者了解框架的使用方法和最佳实践,是学习和使用Spring Framework不可或缺的参考资料。 7. **XML与Java配置*...
《Spring Framework 开发参考手册》是一本专注于Java开发者的权威指南,主要涵盖了Spring框架的核心概念、配置、使用方法以及最佳实践。Spring作为Java生态系统中的重要组成部分,为开发者提供了丰富的功能,包括...
文档通常会涉及配置、代码示例、最佳实践,以及解决问题的策略。 需要注意的是,由于文档内容是通过OCR扫描识别获得的,某些地方可能会有错别字或者识别错误,这需要读者根据上下文以及自身对Spring Framework的...
总的来说,Spring Framework 4.1.0参考文档详细介绍了Spring Framework各个方面的知识,从基础概念到高级特性,从模块划分到应用最佳实践,为开发者提供了全面的学习资源和指导。希望以上的详细知识点能够为使用...
以上只是《Spring Framework 开发参考手册》的部分内容概览,实际手册中会有更详细的API介绍、示例代码和最佳实践指导,对于任何希望掌握Spring框架的开发者来说,都是一份不可或缺的学习资料。