今天工作需要把原来另外一个团队的代码重构
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框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个框架集合提供了一种高效且强大的方式来构建企业级应用,它整合了模型-视图-控制器(MVC)设计模式、依赖注入(DI)...
在本课程“maven3+struts2+spring3+jpa2重构itcat巴巴运动网(前32讲)”中,我们将深入探讨四个关键的技术框架,它们是Java开发中的核心工具,尤其在构建大型企业级应用时发挥着重要作用。这四个技术分别是Maven、...
1. `<constant>`标签设置了Struts2的两个属性,`struts.objectFactory.spring.autoWire`用于指定Spring自动装配的方式,这里是按类型(type)进行装配;`struts.objectFactory`则将Struts2的对象工厂设置为Spring,...
在Chapter01中,我们将了解如何在Spring中配置Bean,以及如何使用@Autowired注解实现自动装配。此外,Spring还提供了AOP(面向切面编程)功能,允许我们定义切面并在多个点(如方法调用前后)执行相同的操作,例如...
Spring框架的核心功能是作为容器,它可以管理和装配应用中的对象,此外,Spring还提供了IoC和AOP能力,使得开发者能够更方便地进行技术整合,比如与Struts2、Hibernate一起构建SSH架构。通过Spring,可以实现组件的...
4. **DWR (Direct Web Remoting)**:是一种JavaScript到Java的远程调用技术,允许在浏览器端直接调用服务器端的Java方法,实现动态更新页面,提供了类似AJAX的功能,但比AJAX更易用,增强了用户体验。 在上述【描述...
- **DAO依赖性**:数据访问对象(Data Access Object)与业务代理之间的依赖关系,通过Spring DI机制实现自动装配。 #### 四、Struts-Spring集成实践 ##### 1. 使用Struts作为MVC框架 - **Struts**:经典的MVC...
此外,`@Autowired`注解用于自动装配bean的依赖,而`@Transactional`注解则可以声明方法为事务性。 ```java import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation...
- **案例:采用SSH结构重构资费管理模块**:使用SSH(Spring + Struts2 + Hibernate)架构重构现有项目,实现模块化的开发和管理。 #### 九、整合开发包struts-spring-plugin.jar - **Struts2创建对象的方式**:...
Spring IoC容器负责管理对象的生命周期,并根据配置自动装配对象及其依赖关系。Spring容器可以通过以下几种方式来创建和管理对象: - **BeanFactory**:这是最简单的Spring容器,它实现了org.springframework.beans...
- 通过`@Autowired`注解自动装配依赖的Bean。 5. **测试与验证:** - 完成上述步骤后,可以通过单元测试或集成测试来验证SSH整合是否成功。 ### Spring管理事务的策略 **知识点概述:** Spring框架提供了强大...
【标题】"s2sh整合实现的oa源码"揭示了这是一个基于Struts2、Hibernate和Spring(简称s2sh)三大开源框架整合构建的企业级办公自动化(OA)系统的源代码。Struts2是用于控制应用程序流程的MVC框架,Hibernate是持久...
在IT行业中,三大框架指的是Spring、Struts和Hibernate,它们是Java Web开发中非常重要的组件。这个"三大框架的注解演示案例"很可能是讲解如何使用注解来配置和操作这三个框架,从而简化传统XML配置的过程。注解是元...
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服务器的安装与配置...
- `@Autowired`:这个注解用于自动装配Bean,Spring会根据类型或名称将依赖注入到目标Bean中。 - `@Component`,`@Service`,`@Repository`:这些是组件扫描的注解,它们标识了一个类作为Spring的Bean,分别对应于...
7. **JavaBean与框架**:在Spring框架中,JavaBean作为bean容器的一部分,可以被自动装配、依赖注入,简化了配置和管理。而在Struts、Hibernate等框架中,JavaBean也扮演着重要的角色,如ActionForm、DAO(数据访问...