【问题标题】:Java config beans from dependent Spring project are not being initialized来自依赖 Spring 项目的 Java 配置 bean 未初始化
【发布时间】:2014-11-16 10:13:17
【问题描述】:

我有 3 个 Spring 项目:'web'、worker' 和 'core'。

'core' 包括来自 'web' 和 'worker' 的通用功能,例如域 bean 或 jpa 存储库,它作为 jar 包含在 'worker' 和 'web' 项目中。

“网络”项目中的 POM

<dependency>
    <groupId>com.proyecti.magmainside221b</groupId>
    <artifactId>core</artifactId>
    <version>1.0.0.RC1</version>            
</dependency>

当我在 Tomcat 中部署“web”项目时,“core”中的 Java 配置 bean 似乎没有被初始化,因为“datasource”bean(在“core”中定义) ' 在一个类中使用 @Bean 并使用 @Configuration 注释的项目)未发现注入到 'PersistentTokenBasedRememberMeServices'

Caused by: 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices#0': Cannot create inner bean '(inner bean)#1978517' of type [org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1978517': Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined

当我部署“web”项目时,我必须做什么才能从“core”项目初始化我的 java config beans?

谢谢!

编辑:

我在日志中发现我的 applicationContext 文件正在加载。

2014-09-22 15:04:37,922 INFO [unknown] [localhost-startStop-1] o.s.b.f.x.XmlBeanDefinitionReader - Loading XML bean definitions from file [/home/aacevedo/workspaces/magma/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web/WEB-INF/classes/META-INF/spring/applicationContext.xml]
2014-09-22 15:04:37,940 INFO [unknown] [localhost-startStop-1] o.s.b.f.x.XmlBeanDefinitionReader - Loading XML bean definitions from URL [jar:file:/home/aacevedo/workspaces/magma/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/web/WEB-INF/lib/core-1.0.0.RC1.jar!/META-INF/spring/applicationContext-core.xml]

在我的“核心”项目中,我(认为)不需要 applicationContext,因为我使用的是 Java 配置,而我的主要配置类如下所示:

@Configuration
@EnableSpringConfigured
@EnableTransactionManagement
@EnableJpaRepositories("com.proyecti.magma.common.datasources.internal.repositories")
@ComponentScan( basePackages = {"com.proyecti.magma"}, 
            excludeFilters=
            {
                @ComponentScan.Filter(type=FilterType.ANNOTATION, value=Controller.class)
            })
@Order(1)
public class BasicDataSourceConfig 
{
...
}

我在 BasicDataSourceConfig 构造函数中设置了一个断点,但没有到达。

当我统一这些项目时,一切正常。

更新 2:

这是我的项目结构的样子:

【问题讨论】:

  • 你能显示webcore模块的Spring配置吗?
  • 编辑了更多信息:)
  • web 项目中的组件扫描是什么样子的? BasicDataSourceConfig 在什么包中?
  • 如果添加了包含信息的屏幕截图,但在调试模式下未到达 BasicDataSourceConfig 构造函数
  • 你能发布'web'上下文配置吗?

标签: java spring maven


【解决方案1】:

我终于找到了适合我的配置。

似乎 @ComponentScan 被包含在带有注释的配置方式中时没有被检测到...我已经在其中创建了一个常规的 applicationContext.xml 文件我的“网络”项目添加了带有 XML 的组件扫描对象,现在我的两个项目中的 @Configuration 类都被成功检测到了。

【讨论】:

    【解决方案2】:

    您需要使用@Import 注释将“核心”上下文导入“网络”上下文。

    【讨论】:

    • @tstorms 这可能是他的解决方案
    • @tstorms 我更新了我的答案。现在不是问题了。
    • 我已经告诉@geoand,我使用的是java config,所以不需要xml文件(当我统一项目时不需要它)。
    猜你喜欢
    • 2013-07-08
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多