Spring 引导:来自库项目的自动装配 bean
Spring Boot: autowire beans from library project
我正在努力从使用 gradle 导入的自定义库中自动装配 bean。
在阅读了几个类似的主题后,我仍然无法找到解决方案。
我有一个 Spring 启动项目,它依赖于另一个项目(我的带有组件、存储库等的自定义库...)。该库是一个 Spring 不可运行的 jar,主要由域实体和存储库组成。它没有可运行的 Application.class 和任何属性...
当我启动应用程序时,我可以看到我的 'CustomUserService' bean(来自库)正在尝试初始化,但是其中自动装配的 bean 无法加载(接口 UserRepository)...
错误:
Parameter 0 of constructor in
com.myProject.customLibrary.configuration.CustomUserDetailsService
required a bean of type
'com.myProject.customLibrary.configuration.UserRepository' that could not
be found.
我什至尝试设置 '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);
...
}
刚刚找到解决方案。
我没有定义要从单独的库中扫描的基础包,而是在这个库中创建了配置 class,并带有一大堆注释,并将其导入到我的主 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 {}
接受的答案太繁琐了。您需要做的是在您的库 jar 中实现您自己的自定义自动配置,以便在主应用程序的类路径扫描中获取它。更多详情 here
您可以在图书馆的 'resources' 文件夹中创建一个名为 'META-INF' 的文件夹,并添加一个名为 'spring.factories' 的文件,内容为 org.springframework.boot.autoconfigure.EnableAutoConfiguration=<fully_qualified_name_of_configuration_file>
。这将自动配置您的库。
我正在努力从使用 gradle 导入的自定义库中自动装配 bean。 在阅读了几个类似的主题后,我仍然无法找到解决方案。
我有一个 Spring 启动项目,它依赖于另一个项目(我的带有组件、存储库等的自定义库...)。该库是一个 Spring 不可运行的 jar,主要由域实体和存储库组成。它没有可运行的 Application.class 和任何属性...
当我启动应用程序时,我可以看到我的 'CustomUserService' bean(来自库)正在尝试初始化,但是其中自动装配的 bean 无法加载(接口 UserRepository)...
错误:
Parameter 0 of constructor in com.myProject.customLibrary.configuration.CustomUserDetailsService required a bean of type 'com.myProject.customLibrary.configuration.UserRepository' that could not be found.
我什至尝试设置 '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);
...
}
刚刚找到解决方案。 我没有定义要从单独的库中扫描的基础包,而是在这个库中创建了配置 class,并带有一大堆注释,并将其导入到我的主 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 {}
接受的答案太繁琐了。您需要做的是在您的库 jar 中实现您自己的自定义自动配置,以便在主应用程序的类路径扫描中获取它。更多详情 here
您可以在图书馆的 'resources' 文件夹中创建一个名为 'META-INF' 的文件夹,并添加一个名为 'spring.factories' 的文件,内容为 org.springframework.boot.autoconfigure.EnableAutoConfiguration=<fully_qualified_name_of_configuration_file>
。这将自动配置您的库。