Spring Boot:从库项目中自动装配bean

时间:2017-01-23 21:21:47

标签: spring-boot spring-data-jpa multi-module spring-ioc component-scan

我正在努力从我的自定义库中自动装配bean,并使用gradle导入。 在阅读了几个相似的主题后,我仍然无法找到解决方案。

我有Spring Boot项目依赖于其他项目(我的自定义库包含Components,Repositories等...)。该库是一个Spring不可运行的jar,主要由域实体和存储库组成。它没有可运行的Application.class和任何属性......

当我启动应用程序时,我可以看到My' CustomUserService' bean(来自库)正在尝试初始化,但是在其中自动装配的bean无法加载(接口UserRepository)......

错误:

  

构造函数的参数0   com.myProject.customLibrary.configuration.CustomUserDetailsS​​ervice   需要一个类型的bean   ' com.myProject.customLibrary.configuration.UserRepository'那不可能   被发现。

我甚至尝试设置'订单',明确加载它(使用' scanBasePackageClasses'),使用包和标记类扫描,添加额外的' EnableJPARepository'注释但没有任何作用......

代码示例(为简单起见,包名称已更改)

package runnableProject.application;

import runnableProject.application.configuration.ServerConfigurationReference.class
import com.myProject.customLibrary.SharedReference.class

//@SpringBootApplication(scanBasePackages = {"com.myProject.customLibrary", "runnableProject.configuration"}) 
//@EnableJpaRepositories("com.myProject.customLibrary")  

@SpringBootApplication(scanBasePackageClasses = {SharedReference.class, ServerConfigurationReference.class})   
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

来自图书馆的课程:

package com.myProject.customLibrary.configuration;

import com.myProject.customLibrary.configuration.UserRepository.class;

@Service
public class CustomUserDetailsService implements UserDetailsService {
    private UserRepository userRepository;    

    @Autowired
    public CustomUserDetailsService(UserRepository userRepository) {
        this.userRepository = userRepository;       
    }
...

package myProject.customLibrary.configuration;

@Repository
public interface UserRepository extends CustomRepository<User> {
    User findByLoginAndStatus(String var1, Status var2);

    ...
}

2 个答案:

答案 0 :(得分:32)

刚刚找到解决方案。 我没有定义基本包来从单独的库中扫描,而是在这个库中创建了配置类,并使用了大量的注释并将其导入到我的主MyApplication.class中:

<p>You are a...</p>
<input type="radio" id="male" name="gender" />
<label for="male">Male</label>
<br/>
<input type="radio" id="female" name="gender" />
<label for="female">Female</label>
<br/>
package runnableProject.application;    

import com.myProject.customLibrary.configuration.SharedConfigurationReference.class

@SpringBootApplication
@Import(SharedConfigurationReference.class)
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

答案 1 :(得分:0)

接受的答案太麻烦了。您需要做的是在您的库 jar 中实现您自己的自定义自动配置,以便在主应用程序的类路径扫描中获取它。更多详情here