首页 > 解决方案 > Spring Gradle 库中的 Controller / RestController

问题描述

我想使用我编写的 Gradle 库中的控制器,但它没有在我使用该库的应用程序中自动装配。

当我@Import(ControllerName.class)在正在运行的应用程序的 ApplicationClass 上使用它时它确实有效,但是我必须手动从库中导入每个类

@ComponentScan不起作用,从我读到的内容来看,它不起作用,@Controller而且@RestController无论如何只有@Bean,@Service@Component.

这是库中的控制器类(我省略了业务逻辑)

@Controller
public class FrontendController {


    @GetMapping("/login")
    public String showLoginForm(){
        return "login";
    }

    //some other endpoints
}

这是目前我的主应用程序中的应用程序类:

@SpringBootApplication
@ComponentScan(basePackages = {"com.myapp.demo", "com.myapp.login-lib"})
public class DemoApplication {

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

}

标签: javaspringgradlecontrollerautowired

解决方案


我发现了我的错误。在我的库中,我(显然)不需要具有公共静态 void main 的类,但我需要从库中正确自动装配内容的是具有 @Configuration 的类。

因为我也有存储库和实体,所以我还需要在库中定义它们的包 -> 所以我向库中添加了一个类,如下所示:

@Configuration
@ComponentScan(basePackages = {"com.myapp.login-lib"})
@EnableJpaRepositories(basePackages = {"com.myapp.login-lib"})
@EntityScan(basePackages = {"com.myapp.login-lib"})
public class BaseConfiguration {
}

然后在我使用库的应用程序中,我只需要导入该配置:

import com.myapp.login-lib.BaseConfiguration;

@SpringBootApplication
@Import(BaseConfiguration.class)
public class DemoApplication {

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

}

推荐阅读