`
chenpy
  • 浏览: 10342 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代码重构 spring自动装配 struts动态方法

 
阅读更多

今天工作需要把原来另外一个团队的代码重构

1:原来的一个请求一个action要修改为多个请求一个aciton

修改1:在struts.xml 文件里面 增加

<constant name="struts.enable.DynamidMethodInvocation" value="true" />

然后新的action配置如下

<package name="admin" extends="json-default" namespace="/admin/dep">
        <action name="*" class="x.x.action.DepartmentAction" method="{1}">
            <result name="abc">/12.jsp</result>
        </action>
 </package>

2:修改原来spring的使用方式

遇到的问题1

在applicationContext.xml文件中新增

<context:component-scan base-package="*.*" />

 

出现问题

Caused by: org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.
    at org.springframework.aop.framework.DefaultAopProxyFactory.createAopProxy(DefaultAopProxyFactory.java:67)
    at org.springframework.aop.framework.ProxyCreatorSupport.createAopProxy(ProxyCreatorSupport.java:104)
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:112)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:476)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:362)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1426)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    ... 24 more

加入jar包 cglib-nodep-2.2.jar 问题解决

然后spring还是没有装配好

然后在寻找问题,发现还少配置

新增配置 <aop:aspectj-autoproxy proxy-target-class="true" />

然后发现有报错

Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect
    at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.hasAspectAnnotation(AbstractAspectJAdvisorFactory.java:119)
    at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.isAspect(AbstractAspectJAdvisorFactory.java:115)
    at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.isInfrastructureClass(AnnotationAwareAspectJAutoProxyCreator.java:100)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:278)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:848)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:820)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:446)
    ... 23 more

加入jar包 aspectjrt-1.5.4.jar
aspectjweaver-1.6.11.jar 后不报错了,但是service还是空。

继续寻找问题。

网上搜索可能是需要struts和spring的自动装配的配置,然后在struts配置文件中增加

 <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
  
    <!--  Make the Spring object factory the automatic default -->
    <constant name="struts.objectFactory" value="spring" />

 

 然后报错

Caused by: Unable to load bean: type:com.opensymphony.xwork2.ObjectFactory class:org.apache.struts2.spring.StrutsSpringObjectFactory - bean - file:/D:/tomcat/tomcat-7/webapps/admin/WEB-INF/classes/struts.xml:10:129
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:232)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:180)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    ... 20 more
Caused by: java.lang.ClassNotFoundException: org.apache.struts2.spring.StrutsSpringObjectFactory
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
    at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:157)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:203)
    ... 23 more

网上搜索后发现是少jar包

加上jar包 struts2-spring-plugin-2.1.8.1.jar 后

报错

Caused by: Unable to load bean: type:com.opensymphony.xwork2.ObjectFactory class:org.apache.struts2.spring.StrutsSpringObjectFactory - bean - file:/D:/tomcat/tomcat-7/webapps/admin/WEB-INF/classes/struts.xml:10:129
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:232)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:101)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:180)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    ... 20 more
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name spring has already been loaded by [unknown location] - bean - file:/D:/tomcat/tomcat-7/webapps/admin/WEB-INF/classes/struts.xml:10:129
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:216)
    ... 23 more

是bean重复创建的问题

删除  <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
问题解决。

久违的自动装配bean成功装配好

 

 

 

 

分享到:
评论

相关推荐

    SSH 框架 struts-2.3.34 spring4.3.12 hibernate5.0.12

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了一种高效且强大的方式来构建企业级应用,它整合了模型-视图-控制器(MVC)设计模式、依赖注入(DI)...

    maven3+struts2+spring3+jpa2重构itcat巴巴运动网(前32讲)

    在本课程“maven3+struts2+spring3+jpa2重构itcat巴巴运动网(前32讲)”中,我们将深入探讨四个关键的技术框架,它们是Java开发中的核心工具,尤其在构建大型企业级应用时发挥着重要作用。这四个技术分别是Maven、...

    struts2+ibatis+spring整合开发

    1. `&lt;constant&gt;`标签设置了Struts2的两个属性,`struts.objectFactory.spring.autoWire`用于指定Spring自动装配的方式,这里是按类型(type)进行装配;`struts.objectFactory`则将Struts2的对象工厂设置为Spring,...

    eclipse_struts_hibernate_spring集成开发宝典 chapter01.rar

    在Chapter01中,我们将了解如何在Spring中配置Bean,以及如何使用@Autowired注解实现自动装配。此外,Spring还提供了AOP(面向切面编程)功能,允许我们定义切面并在多个点(如方法调用前后)执行相同的操作,例如...

    学习spring的好东西

    Spring框架的核心功能是作为容器,它可以管理和装配应用中的对象,此外,Spring还提供了IoC和AOP能力,使得开发者能够更方便地进行技术整合,比如与Struts2、Hibernate一起构建SSH架构。通过Spring,可以实现组件的...

    Struts+Hibernate+Spring+DWR实例

    4. **DWR (Direct Web Remoting)**:是一种JavaScript到Java的远程调用技术,允许在浏览器端直接调用服务器端的Java方法,实现动态更新页面,提供了类似AJAX的功能,但比AJAX更易用,增强了用户体验。 在上述【描述...

    Spring基础教程.pdf

    - **DAO依赖性**:数据访问对象(Data Access Object)与业务代理之间的依赖关系,通过Spring DI机制实现自动装配。 #### 四、Struts-Spring集成实践 ##### 1. 使用Struts作为MVC框架 - **Struts**:经典的MVC...

    ssh框架构建 hibernate注解 spring注解

    此外,`@Autowired`注解用于自动装配bean的依赖,而`@Transactional`注解则可以声明方法为事务性。 ```java import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation...

    spring框架学习

    - **案例:采用SSH结构重构资费管理模块**:使用SSH(Spring + Struts2 + Hibernate)架构重构现有项目,实现模块化的开发和管理。 #### 九、整合开发包struts-spring-plugin.jar - **Struts2创建对象的方式**:...

    spring 3 企业应用开发

    Spring IoC容器负责管理对象的生命周期,并根据配置自动装配对象及其依赖关系。Spring容器可以通过以下几种方式来创建和管理对象: - **BeanFactory**:这是最简单的Spring容器,它实现了org.springframework.beans...

    java_spring_day05.pdf

    - 通过`@Autowired`注解自动装配依赖的Bean。 5. **测试与验证:** - 完成上述步骤后,可以通过单元测试或集成测试来验证SSH整合是否成功。 ### Spring管理事务的策略 **知识点概述:** Spring框架提供了强大...

    s2sh整合实现的oa源码

    【标题】"s2sh整合实现的oa源码"揭示了这是一个基于Struts2、Hibernate和Spring(简称s2sh)三大开源框架整合构建的企业级办公自动化(OA)系统的源代码。Struts2是用于控制应用程序流程的MVC框架,Hibernate是持久...

    三大框架的注解演示案例

    在IT行业中,三大框架指的是Spring、Struts和Hibernate,它们是Java Web开发中非常重要的组件。这个"三大框架的注解演示案例"很可能是讲解如何使用注解来配置和操作这三个框架,从而简化传统XML配置的过程。注解是元...

    JAVA程序开发大全---上半部分

    3.6 MyEclipse中的Java代码重构支持 59 3.6.1 Java元素重命名 59 3.6.2 Java元素移动 60 3.6.3 Java元素复制 61 3.7 本章小结 61 第4章 Java开发的版本控制及SVN 62 4.1 版本控制与SVN 62 4.2 SVN服务器的安装与配置...

    ssh-使用注解

    - `@Autowired`:这个注解用于自动装配Bean,Spring会根据类型或名称将依赖注入到目标Bean中。 - `@Component`,`@Service`,`@Repository`:这些是组件扫描的注解,它们标识了一个类作为Spring的Bean,分别对应于...

    javabeandevelop

    7. **JavaBean与框架**:在Spring框架中,JavaBean作为bean容器的一部分,可以被自动装配、依赖注入,简化了配置和管理。而在Struts、Hibernate等框架中,JavaBean也扮演着重要的角色,如ActionForm、DAO(数据访问...

Global site tag (gtag.js) - Google Analytics