【发布时间】:2021-01-22 05:48:38
【问题描述】:
我有一个 Spring MVC 应用程序。 (Java 平台的应用程序框架和控制容器反转。该框架的核心功能可以被任何 Java 应用程序使用,但是有一些扩展可以在 Java EE(企业版)平台之上构建 Web 应用程序)使用这个 Spring 过滤, 现在使用弹簧过滤器
<context:component-scan base-package="com.pastis" >
<context:exclude-filter type="assignable" expression="com.pastis.security.controller.SecurityManagerController"/>
<context:exclude-filter type="assignable" expression="com.pastis.pq.workflow.web.controller.WorkflowController"/>
<context:exclude-filter type="regex" expression="com.pastis.pq.workflow.web.*" />
<context:exclude-filter type="regex" expression="com.pastis.security.*" />
<context:exclude-filter type="regex" expression="com\.pastis\.security\..*" />
</context:component-scan>
<jpa:repositories base-package="com.pastis.repositories"/>
也试过了:
<context:annotation-config />
<context:component-scan base-package="com.pastis" />
<context:component-scan base-package="com.pastis.security">
<context:exclude-filter type="assignable" expression="com.pastis.security.controller.SecurityManagerController"/>
</context:component-scan>
<context:component-scan base-package=" com.pastis.pq">
<context:exclude-filter type="assignable" expression="com.pastis.pq.workflow.web.controller.WorkflowController"/>
<context:exclude-filter type="assignable" expression="com.pastis.pq.workflow.web.controller.WorkflowAdminController"/>
</context:component-scan>
但我对WorkflowController 有疑问
还有这个控制器:
com.pastis.security.controller.SecurityManagerController
不过,当我启动应用程序时。我收到了这个错误:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityManagerController':
servlet-xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- Use annotations to inject stuff -->
<context:annotation-config />
<context:component-scan base-package="com.pastis.pq" use-default-filters="false" >
<context:include-filter type="aspectj" expression="com.pastis.pq.web.endpoint.*" />
<!--context:include-filter type="annotation" expression="com.pastis.pq.web."-/-->
</context:component-scan>
<jpa:repositories base-package="com.pastis.pq.repositories"/>
<!-- main datasource -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:~/test2;DB_CLOSE_DELAY=-1 />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<!-- transaction management -->
<tx:annotation-driven/>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- spring data repositories -->
<jpa:repositories base-package="com.pastis.pq.repositories"/>
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="database" value="H2" />
<property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="pastis-entities" />
<property name="packagesToScan">
<array>
<value>com.pastis.pq.model</value>
</array>
</property>
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<property name="jpaProperties">
<props>
<prop key="eclipselink.target-database">org.eclipse.persistence.platform.database.OraclePlatform</prop>
<prop key="eclipselink.target-server">WebLogic</prop>
</props>
</property>
</bean>
<!-- customizable database configuration -->
<bean id="dataConfig" class="com.pastis.commons.services.SystemConfig">
<constructor-arg index="0" value="test-config.properties"/>
<constructor-arg index="1" ref="dataSource"/>
</bean>
</beans>
我运行测试时的控制台:
2020-10-08 10:46:57,315 [DEBUG] org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'securityManagerController'
2020-10-08 10:46:57,315 [DEBUG] org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'securityManagerController'
2020-10-08 10:46:57,315 [DEBUG] org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating instance of bean 'securityManagerController'
2020-10-08 10:46:57,315 [DEBUG] org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating instance of bean 'securityManagerController'
2020-10-08 10:46:57,317 [DEBUG] org.springframework.beans.factory.annotation.InjectionMetadata - Registered injected element on class [com.pastis.security.controller.SecurityManagerController]:
【问题讨论】:
-
首先,您的排除过滤器已过时,请查看包路径。其次,您需要提供更多信息。完整的堆栈跟踪或至少完整的错误消息。它可能会告诉您缺少哪个依赖项。您还必须显示您的 WebApplicationContext 配置。
标签: java spring spring-mvc inversion-of-control component-scan