我有 3 个 Spring 项目:“web”、“worker”和“core”。
“core”包含“web”和“worker”的常见功能,例如域 bean 或 jpa 存储库,并且它作为 jar 包含在“worker”和“web”项目中。
“web”项目中的 POM
<dependency>
<groupId>com.proyecti.magmainside221b</groupId>
<artifactId>core</artifactId>
<version>1.0.0.RC1</version>
</dependency>
当我在 Tomcat 中部署“web”项目时,“core”中的 Java 配置 bean 似乎没有初始化,因为“数据源”bean(在“core”中定义) ' 在一个类中使用 @Bean 并用 @Configuration 注释的项目)未发现注入(inject)到 '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配置bean?
谢谢!
编辑:
我在日志中发现我的 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:
这就是我的项目结构:
最佳答案
您需要使用 @Import
注释将“core”上下文导入到“web”上下文中。
关于来自依赖 Spring 项目的 Java 配置 bean 未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974194/