`
ioio
  • 浏览: 140983 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Spring2.5 Mvc

阅读更多

今天发现一个奇怪的问题,Spring2.5的事物处理过程中,在web中事物控制无效,但是利用ClassPathXmlApplicationContext加载bean的方式可以进行事物控制。Web的代码如下:

/WEB-INF/SpringDemo-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans

    xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:p="http://www.springframework.org/schema/p"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

   

       <!-- :对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->

    <context:component-scan base-package="com.example.springdemo"/>

 

    <!-- :启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>

 

    <!--  :对模型视图名称的解析,即在模型视图名称添加前后缀 -->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

       

</beans>

 

 

Classpath: applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:context="http://www.springframework.org/schema/context"

       xmlns:tx="http://www.springframework.org/schema/tx"

       xmlns:p="http://www.springframework.org/schema/p"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

                 http://www.springframework.org/schema/tx 

             http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context-2.5.xsd">

            

       <context:annotation-config />

   

       <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

              destroy-method="close">

              <property name="driverClassName" value="com.mysql.jdbc.Driver" />

              <property name="url" value="jdbc:mysql://localhost/springdemo" />

              <property name="username" value="root" />

              <property name="password" value="sa" />

       </bean>

      

       <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

              <property name="dataSource" ref="dataSource" />

       </bean>

      

       <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>

      

<!--

       利用ClassPathXmlApplicationContext方式加载时需要打开注释

    <context:component-scan base-package="com.example.springdemo"/>

  -->    

</beans>

 

log4j.properties

log4j.rootLogger=INFO, A1 , R

 

log4j.logger.org.apache=INFO

 

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

 

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=C:/OSWorkflowDemo.log

log4j.appender.R.MaxFileSize=1000KB

log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

 

测试的java函数:

       public static void main(String[] args) {

              // TODO Auto-generated method stub

              String [] conf = new String[2];

              conf[0]="applicationContext.xml";

              conf[1]="dataAccessContext-jdbc.xml";

              ApplicationContext appContext = new ClassPathXmlApplicationContext(conf);

              UserService us = (UserService) appContext.getBean("userService");

              us.testTx();

             

//            System.out.println("hello");

       }

其他java类的主要函数如下:

public interface UserService {

       void testTx();

}

 

@Service("userService")

public class UserServiceImpl implements UserService{

       @Autowired

       @Qualifier("userDao")

       private UserDAO userDao;

       public void testTx() {

              userDao.insertTwoRecord();

       }

}

 

public interface UserDAO {

       void insertTwoRecord();

}

 

@Component("userDao")

@Transactional

public class UserDAOImpl   implements UserDAO{

       private JdbcTemplate jdbcTemplate;

       @Autowired

    public void setDataSource(@Qualifier("dataSource")DataSource dataSource) {

        this.jdbcTemplate = new JdbcTemplate(dataSource);

    }

       @Transactional(readOnly=false)

       public void insertTwoRecord() {

              System.out.println("hello ");

              jdbcTemplate.execute("INSERT INTO USER(USERNAME,PASSWORD,EMAIL)VALUES('123','123','123')");

              jdbcTemplate.execute("INSERT INTO USER(USERNAME,PASSWORD,EMAIL)VALUES('12322222222222222222','123','123')");

       }

}

 

 

@Controller

public class HelloController {

       @Autowired

       @Qualifier("userService")

       private UserService userService;

       @RequestMapping("/sayHello.do")

       public String sayHello(ModelMap map,@RequestParam("id") Long userId){

              map.put("username", "sayHello 1 ");

              userService.testTx();

             

              return "sayHello";

       }

       @RequestMapping("/sayHello2.do")

       public String sayHello2(ModelMap map,@RequestParam("name") String username){

              map.put("username", username);

              return "sayHello";

       }

}

 

数据库的脚本如下:

CREATE TABLE `user` (

  `ID` int(11) NOT NULL auto_increment,

  `PASSWORD` varchar(10) default NULL,

  `USERNAME` varchar(16) NOT NULL,

  `EMAIL` varchar(64) default NULL,

  PRIMARY KEY  (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

Web.xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

       xmlns="http://java.sun.com/xml/ns/j2ee"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

       http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

       <!--  Spring 服务层的配置文件 -->

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath:applicationContext.xml,classpath:dataAccessContext-jdbc.xml</param-value>

    </context-param>

    

    <!--  Spring 容器启动监听器 -->

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

 

    <!--  Spring MVC Servlet,它将加载WEB-INF/annomvc-servlet.xml

          配置文件,以启动Spring MVC模块-->

    <servlet>

        <servlet-name>SpringDemo</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet

        </servlet-class>

        <load-on-startup>0</load-on-startup>

    </servlet>

 

    <servlet-mapping>

        <servlet-name>SpringDemo</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

 

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>

 

其中,dataAccessContext-jdbc.xml是个空文件,上面的配置没有列出。在上面的代码测试过程中,遇到了不少的问题,下面进行简单的列举。

1、关于beans里面的xmlns=http://www.springframework.org/schema/beans错误,总是在提示出现错误。发现是lib下面的springjar包存在不同的版本,删除jar包后重新加入一个spring的包后好了。

 

2、后来出现了一个问题,错误提示信息没有记下,反正在网上也是找到了解决的办法。错误的原因是利用myeclipse加入了hibernatespringjar包,其中,asm系列的包有冲突,删除之后好了。

 

3、利用ClassPathXmlApplicationContext方式加载时需要加入 context:component-scan ,不然不能识别bean,并且在SpringDemo-servlet.xml文件中,必须有上面xml文件中的123.否则的话web模式下请求的url不被识别。

 

4、最后一个问题还是最要命的,就是两种bean的加载模式下,事物控制有效和无效。网上有人提出:估计spring初始化时优先component-scan bean,注入Web Controller Service直接拿了上下文中的@Service("someService"),这个时候@Transactional (readOnly=false, isolation = Isolation.READ_COMMITTED) 还没有被处理.所以Web Controller ServiceSomeServiceImpl而不是AOP$ProxyNO。提出的解决办法是:不让spring扫描到ServiceImpl,直接写在xml文件,其它的配置和annotation照用,这样事务就起作用了。这样可以,但是service就必须写在xml文件里面了。感觉不爽。

分享到:
评论

相关推荐

    spring2.5 mvc 完整项目

    《Spring 2.5 MVC 完整项目:深入解析与实践》 在IT行业中,Spring框架作为Java领域的重要支柱,其MVC(Model-View-Controller)模块在Web应用程序开发中占据着举足轻重的地位。本文将针对“Spring 2.5 MVC 完整...

    spring2.5 mvc_ibatis2

    《Spring 2.5 MVC与iBatis 2整合详解》 在Web开发领域,Spring框架以其强大的功能和灵活性备受开发者喜爱。Spring 2.5版本是Spring发展史上的一个重要里程碑,它引入了许多新特性,使得开发更加高效。同时,iBatis...

    Spring2.5MVC--基于注解的附件上传

    这篇博客"Spring2.5 MVC -- 基于注解的附件上传"详细介绍了如何在Spring MVC 2.5中实现这一功能。 首先,我们需要了解Spring MVC中处理文件上传的基本概念。文件上传主要涉及到两个组件:`MultipartResolver`和`@...

    Spring 2.5 mvc例子

    总的来说,Spring 2.5 MVC 提供了一个强大且灵活的平台,让开发者能够高效地构建 Web 应用程序。通过注解驱动、AOP 集成以及丰富的组件支持,它简化了开发流程,提高了代码质量。在实际项目中,深入理解和熟练运用...

    Spring2.5 MVC 处理管道使用参考手册

    Spring 2.5 MVC框架是Java Web开发中的一个重要组成部分,它提供了一种强大的方式来构建可维护、可扩展的Web应用程序。在这个处理管道的概念中,我们主要指的是Spring MVC的DispatcherServlet,请求处理流程,以及...

    spring2.0MVC+spring2.5MVC+portletMVC

    本主题将深入探讨Spring 2.0、2.5版本的MVC特性和Portlet MVC的相关知识。 首先,Spring 2.0在MVC方面引入了显著的改进,包括: 1. **依赖注入(DI)**:Spring 2.0增强了对MVC组件的依赖注入支持,允许开发者更...

    Spring2.5 MVC 处理管道使用参考手册V1.0.chm

    目前介绍springMVC的资料...本文根据笔者一年多对spring2.5 MVC的学习与实践,将平时的学习笔记进行了整理与完善,对springMVC中涉及到的绝大部分处理管道进行了详细的描述,其中所有列举的配置方式,笔者都做过测试。

    FLEX4+Gilead+BlazeDS+pureMVC+spring2.5 MVC+hibernate3.3+SLF4J+CXF2.3.0 以及相关插件

    标题中的"FLEX4+Gilead+BlazeDS+pureMVC+spring2.5 MVC+hibernate3.3+SLF4J+CXF2.3.0"涉及了多个关键技术和框架,这些都是在构建分布式、企业级Web应用程序时常用的技术组件。下面将逐一解析这些技术的核心概念和...

    spring webmvc struts 2.5 很难找的依赖包

    spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 ...

    精通Spring2.5pdf书籍proSpring2.5

    《精通Spring2.5》是一本深度探讨Spring框架的权威指南,主要针对Spring 2.5版本进行深入解析。Spring是Java企业级应用开发中最受欢迎的框架之一,它以其轻量级、模块化的设计,以及对IoC(Inversion of Control,...

    Spring2.5-中文参考手册chm

    Spring2.5版本是该框架的一个重要里程碑,它在2008年发布,带来了许多新特性和改进,提升了开发者在构建应用程序时的灵活性和效率。 **依赖注入(DI)和控制反转(IoC)** Spring的核心特性之一是依赖注入(Dependency...

    spring2.5的所有jar包

    6. **Web-MVC增强**:Spring MVC在2.5版本中提供了更多的特性,如:模型-视图-适配器(MVA)模式的改进,支持RESTful风格的URL映射,以及对HTTP上传文件的支持。 7. **Spring Expression Language (SpEL)**:Spring...

    Spring2.5 源代码

    Spring 2.5在MVC方面有许多改进,包括对注解的支持,比如`@RequestMapping`、`@Controller`等,使得控制器的定义更加简洁。 7. **国际化(i18n)与本地化(l10n)**: Spring 2.5提供了强大的本地化支持,允许...

    Spring2.5-中文参考手册chm.zip

    这个"Spring2.5-中文参考手册chm.zip"文件包含了关于Spring 2.5版本的详细中文指南,对于学习和理解Spring框架具有很高的价值。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程...

    Spring2.5 中文文档 chm格式

    除此之外,Spring2.5在MVC(Model-View-Controller)方面也有显著提升。Spring MVC是构建Web应用的重要部分,提供了处理HTTP请求、模型绑定、视图解析等功能。2.5版本引入了`@RequestMapping`注解,使得控制器方法与...

    spring 2.5中文帮助文档

    通过阅读《Spring2.5-中文参考手册.chm》这份文档,开发者可以深入了解Spring 2.5的各种特性和用法,解决实际开发中遇到的问题,提升开发效率。文档不仅包含详细的API参考,还包含丰富的示例和最佳实践指导,是学习...

    struts1.2 + spring2.5 + hibernate3.2框架demo

    总结来说,这个demo项目提供了一个学习和实践Struts1.2、Spring2.5和Hibernate3.2集成的平台,涵盖了MVC设计模式、依赖注入、面向切面编程和对象关系映射等多个关键概念。通过深入研究和修改这个项目,开发者能够...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...

    spring2.5中文文档

    7. **MVC框架增强**:Spring MVC在2.5版本中也得到了改进,支持RESTful风格的URL映射,提供了更强大的视图解析和模型绑定功能。 8. **更多数据访问支持**:Spring 2.5增强了对各种持久层技术的支持,如JDBC、...

    传智播客spring2.5源代码

    9. **Web应用增强**:Spring 2.5在MVC框架中引入了诸如`@RequestMapping`、`@RequestParam`等注解,简化了控制器方法的映射和参数绑定。 10. **数据访问增强**:Spring 2.5增强了对JDBC、Hibernate、JPA等数据访问...

Global site tag (gtag.js) - Google Analytics