Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自Spring Gradle库的控制器/RestController_Java_Spring_Gradle_Controller_Autowired - Fatal编程技术网

Java 来自Spring Gradle库的控制器/RestController

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一起起作用 这是库中的控制器类(我省略了业务逻辑) 这是当前我的

我想使用我编写的Gradle库中的控制器,但在我使用该库的应用程序中它不会自动连接

当我对正在运行的应用程序的ApplicationClass使用
@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的类确实位于库中