Java 来自Spring Gradle库的控制器/RestController
我想使用我编写的Gradle库中的控制器,但在我使用该库的应用程序中它不会自动连接 当我对正在运行的应用程序的ApplicationClass使用Java 来自Spring Gradle库的控制器/RestController,java,spring,gradle,controller,autowired,Java,Spring,Gradle,Controller,Autowired,我想使用我编写的Gradle库中的控制器,但在我使用该库的应用程序中它不会自动连接 当我对正在运行的应用程序的ApplicationClass使用@Import(ControllerName.class)时,它确实起作用,但是我必须手动从库中导入每个类 @ComponentScan不起作用,据我所知,它与@Controller和@RestController不起作用,无论如何,它只与@Bean、@Service和@Component一起起作用 这是库中的控制器类(我省略了业务逻辑) 这是当前我的
@Import(ControllerName.class)
时,它确实起作用,但是我必须手动从库中导入每个类
@ComponentScan
不起作用,据我所知,它与@Controller
和@RestController
不起作用,无论如何,它只与@Bean
、@Service
和@Component
一起起作用
这是库中的控制器类(我省略了业务逻辑)
这是当前我的主应用程序中的applicationClass:
@SpringBootApplication
@ComponentScan(basePackages = {"com.myapp.demo", "com.myapp.login-lib"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
我发现了我的错误。在我的库中,我(显然)不需要一个带有公共静态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);
}
}
我发现了我的错误。在我的库中,我(显然)不需要一个带有公共静态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);
}
}
它可以很好地用于组件扫描,但事实上它不能用于您,这意味着它不在组件扫描注释中的包中。但是,您遗漏了包名,因此无法确定
@Controller
像@Service
(和其他)只是另一个@组件
,因此它将被组件扫描检测到。还有,为什么要自动连接控制器?它应该听一个URL。我可能用错了词,说了“Autowire”->我的意思是我想让spring自动实例化它没有做的控制器。我的错误是我需要在库中而不是在主应用程序中进行组件扫描(请参见下面的回答),仍然感谢您的建议:)添加相同的组件扫描(或@springbootplication
的basePackage)应该会产生相同的结果。或者只需将您的@springboot应用程序
放在com.myapp
包中,您就不需要做任何事情了。这是不在您的库中的主要应用程序(因为这没有真正意义)。另外,请确保不要将库作为Spring启动应用程序本身分发/打包,因为这也不起作用。我的主应用程序有包“com.myapp.demo”,我的lib有包“com.myapp.login lib”->使用@ComponentScan(basePackages={“com.myapp.login lib})在@SpringBootApplication旁边的ApplicationClass上不起作用。在库中的配置上使用它确实起作用。因此,我不知道如何在主应用程序中(而不是在库中)执行此操作“->我的库中没有@SpringBootApplication注释。带有\@Controller的类确实存在于库中,但是它在组件扫描中工作得非常好,它不能与您一起工作的事实意味着它不在组件扫描注释中的包中。但是,您遗漏了包名,因此无法确定@Controller
像@Service
(和其他)只是另一个@组件
,因此它将被组件扫描检测到。还有,为什么要自动连接控制器?它应该听一个URL。我可能用错了词,说了“Autowire”->我的意思是我想让spring自动实例化它没有做的控制器。我的错误是我需要在库中而不是在主应用程序中进行组件扫描(请参见下面的回答),仍然感谢您的建议:)添加相同的组件扫描(或@springbootplication
的basePackage)应该会产生相同的结果。或者只需将您的@springboot应用程序
放在com.myapp
包中,您就不需要做任何事情了。这是不在您的库中的主要应用程序(因为这没有真正意义)。另外,请确保不要将库作为Spring启动应用程序本身分发/打包,因为这也不起作用。我的主应用程序有包“com.myapp.demo”,我的lib有包“com.myapp.login lib”->使用@ComponentScan(basePackages={“com.myapp.login lib})在@SpringBootApplication旁边的ApplicationClass上不起作用。在库中的配置上使用它确实起作用。因此,我不知道如何在主应用程序中(而不是在库中)执行此操作“->我的库中没有@SpringBootApplication注释。但是,带有\@Controller的类确实位于库中