struts2、hibernate、spring三大框架整合

首先整合步骤见:iteye博客文章“java三大框架独立运行以及互相之间整合各自需要用到的jar文件以及配置方式 ”里面的 struts、hibernate、spring三大框架整合步骤。(按照这个步骤来整合框架开发项目)。

下面讲解struts2、hibernate、spring三个框架的整合:

Hibernate整合spring之后致命的一个问题是里面没有事务,没有配置事务,这样导致dao里面一个方法就在一个事务里面,而实际开发里面这种情况是很少见的,实际开发中我们经常是几个数据库操作放到同一个事务里面,要么同时成功,要么同时失败。以前使用事务都是通过transaction,开启事务或关闭事务,现在不用它了。实际上spring对事务提供了非常好的支持,依然使用了AOP的方式,采用那种申明性的事务,也就是说事务的代码都不用编写了,只需要配置好就可以了,在对应的方法上配置好事务,那么这个方法就具备了事务的功能。



另外在三个框架整合过程中,当我们把所有依赖jar文件都导入进来,把代码都编写好,把配置文件都配置好之后,启动tomcat,可能会报这样一个错误:

[color=red]严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1336)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
[/color]



这个bug是由于java程序库的版本管理问题造成的,三大框架里面各自依赖的jar包可能有重复的,我们引入依赖之后,可能就同时导入了两个相同的但版本不同的jar包。我们会发现我们引入的jar包里面有两个相同的(只是版本不同):asm.jar和asm-2.2.3.jar,解决办法是到硬盘lib目录下删掉其中一个jar包,只留一个即可。



在附件这个工程里面,有数据源、连接池……等重要知识点模块,最后又加了事务处理。


注意:在代码编写过程中,不需要考虑事务,在代码编写完成之后并且正常运行之后再在配置文件里添加事务。然后在需要配置事务的方法上给它配置上事务即可。这里是用Spring提供的AOP的申明式事务的方式实现的。Spring里面的事务完全是通过AOP的方式实现的,Spring里面提供了一个事务管理器相关的类HibernateTransactionManager,如果想对某个方法或某个类里面的某些方法增加事务的话,要做两件事情:
1、 申明好HibernateTransactionManager这样一个bean。
2、 利用上一步申明的bean去增强需要使用事务的类。(通常情况下我们是将事务配置在service上,而不是配置在Dao 上,因为Dao操作是一个个独立的操作。而一个Service有可能同时引用到两个或是更多的Dao的方法,那么对于Service方法添加事务的话,那么这一个Service用到的所有Dao方法就在一个事务之内了,要么同时成功,要么同时失败。所以一般的业务开发上面,我们都将事务配置在Service这一层上)。


在配置事务的过程中,TransactionProxyFactoryBean是spring为我们提供的一个工厂类,用来为service层的对象生成具有事务的代理对象。



重点查看附件项目(重点查看Spring的配置文件applicationContext.xml)。
附件项目见自己csdn账号里面的资源:struts2、hibernate、spring三大框架整合项目包。这个项目包完整的演示了三大框架整合的示例代码。一定要经常多敲几次熟练熟练。

你可能感兴趣的:(spring,框架,Hibernate,struts)