day76_maven02:maven拆分各层配置后,【pom.xml、Spring配置都按层拆分(dao/service/action)】,导致报错解决。

来源:互联网 发布:价值观不同的体现知乎 编辑:程序博客网 时间:2024/06/06 06:29

=== maven拆分各层配置后,【pom.xml、Spring配置都按层拆分(dao/service/action)】,导致报错解决。

Spring配置拆分:===【各层只配置本层相关配置。】

①dao:applicationContext-dao.xml  

<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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 数据库连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver" /><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/maven" /><property name="user" value="root" /><property name="password" value="root" /></bean><!-- 配置sessionFactory --><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 依赖dataSource --><property name="dataSource" ref="dataSource"/><!-- 创建工厂需要加载hibernate映射文件 --><property name="configLocations" value="classpath:hibernate.cfg.xml"></property></bean><bean name="customerDao" class="cn.heima.dao.impl.CustomerDaoImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean></beans>

②service:applicationContext-service.xml

<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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 事务属于service层 --><bean  id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><tx:advice id="advice" transaction-manager="transactionManager"><tx:attributes> <tx:method name="find*" read-only="true" /></tx:attributes></tx:advice><aop:config> <aop:pointcut  id="serviceMethod"  expression="execution(* cn.heima.service.impl.*.*(..))"/> <aop:advisor advice-ref="advice" pointcut-ref="serviceMethod"/></aop:config><bean name="customerService" class="cn.heima.service.impl.CustomerServiceImpl"><property name="customerDao" ref="customerDao"></property></bean></beans>

③action:applicationContext-action.xml

<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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx  http://www.springframework.org/schema/tx/spring-tx.xsd"><bean name="customerAction" class="cn.heima.action.CustomerAction" scope="prototype"><property name="customerService" ref="customerService"></property></bean></beans>

修改web.xml:读取spring配置文件

<listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <context-param>  <!-- ContextLoaderListener 父类里-->  <param-name>contextConfigLocation</param-name><!--    <param-value>classpath:applicationContext.xml</param-value> -->    <param-value>classpath:applicationContext-*.xml</param-value>    </context-param>



=====错误信息:service创建失败。

===老师:找不到service层Spring配置。

HTTP Status 500 -type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionUnable to instantiate Action, customerAction,  defined for 'customerAction_findByCustId' in namespace '/'Error creating bean with name 'customerAction' defined in file [F:\EclipseWorkSpace\ssh_parent\ssh_web\target\classes\applicationContext-action.xml]: Cannot resolve reference to bean 'customerService' while setting bean property 'customerService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'customerService' is defined - action - file:/F:/EclipseWorkSpace/ssh_parent/ssh_web/target/classes/struts.xml:9:72com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:314)com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:395)com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)root causeorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerAction' defined in file [F:\EclipseWorkSpace\ssh_parent\ssh_web\target\classes\applicationContext-action.xml]: Cannot resolve reference to bean 'customerService' while setting bean property 'customerService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'customerService' is definedorg.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054)com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:161)com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:178)com.opensymphony.xwork2.factory.DefaultActionFactory.buildAction(DefaultActionFactory.java:22)com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:148)com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:295)com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:395)com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)root causeorg.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'customerService' is definedorg.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698)org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1175)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1054)com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:161)com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:178)com.opensymphony.xwork2.factory.DefaultActionFactory.buildAction(DefaultActionFactory.java:22)com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:148)com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:295)com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:395)com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:194)org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.
====解决:

<listener>  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <context-param>  <!-- ContextLoaderListener 父类里-->  <param-name>contextConfigLocation</param-name><!--    <param-value>classpath:applicationContext.xml</param-value> --><!-- 报错:service 创建失败。==######=原因:classpath只能读取src目录下的配置文件,【classpath*】:还可以读取jar包中的配置文件    <param-value>classpath:applicationContext-*.xml</param-value> -->   <param-value>classpath*:applicationContext-*.xml</param-value>     </context-param>



原创粉丝点击