首页 文章

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

提问于
浏览
10

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

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

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

错误:

com.myProject.customLibrary.configuration.CustomUserDetailsService中构造函数的参数0需要一个无法找到的类型为“com.myProject.customLibrary.configuration.UserRepository”的bean .

我甚至试图设置'Order',显式加载它(使用'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);

    ...
}

1 回答

  • 29

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

    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);
        }
    
    }
    
    package com.myProject.customLibrary.configuration;
    
    @Configuration
    @ComponentScan("com.myProject.customLibrary.configuration")
    @EnableJpaRepositories("com.myProject.customLibrary.configuration.repository")
    @EntityScan("com.myProject.customLibrary.configuration.domain")
    public class SharedConfigurationReference {}
    

相关问题