我已经定义了一个用@Configuration注释它的类和定义的方法init并用注释@Bean定义它但是当我试图使用auto-wired访问那个bean时它给了我一个错误 应用程序上下文中某些bean的依赖关系形成一个循环:
┌─────┐
| Sum defined in class path resource [com/example/Application/Appconfig.class]
@Configuration
@EnableAutoConfiguration
public class Appconfig {
@Bean
public int Sum(int a,int b){
int c=a+b;
return c;
}
我的控制器类
@Autowired
Appconfig appconfig;
@PostMapping(value = "/api/{id1}/{id2}")
public void math(@PathVariable int id1,@PathVariable int id2){
appconfig.Sum(id1,id2);
System.out.println(id1);
System.out.println(id2);
System.out.println(appconfig.Sum(id1,id2));
}
错误
The dependencies of some of the beans in the application context form a cycle:
┌─────┐
| Sum defined in class path resource [com/example/Application/Appconfig.class]
└─────┘
答案 0 :(得分:3)
您的依赖关系是循环的,这意味着要创建A
,您需要B
,这需要A
。
@Configuration
@EnableAutoConfiguration
public class Appconfig {
public int Sum(int a,int b){
int c=a+b;
return c;
}
}
会起作用,但不是一个好习惯。配置类不应为@Autowired
。
在Spring Boot中,您可以通过两种方式创建@Bean
。一个是将类定义为@Bean
:
@Bean
public class MyBean {
}
另一种方法是通过以下方法:
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
以上两者都会在创建@Bean
时创建Context
。