无法在spring boot中定义bean

时间:2017-04-11 07:31:07

标签: java spring spring-boot

我已经定义了一个用@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]
└─────┘

1 个答案:

答案 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