Difference between @Bean and @Autowired

前端 未结 6 1811
小蘑菇
小蘑菇 2020-11-28 01:26

Why can\'t I use @Autowired in this case?

@SpringBootApplication
public class Application {

    @Autowired
    BookingService bookingService;

         


        
6条回答
  •  天涯浪人
    2020-11-28 01:45

    Whatever class you have instantiated using @Autowire, you can instantiate it inside a class with @Configuration annotation using @Bean on the method.

    Both @Autowire and @Bean are ways to initialize instances of a Class.

    The difference is if you use @Bean to instantiate a class, you have more control over the initialization. For example if you are instantiating a Resilience4J Circuit breaker class, if you do it inside a method with @Bean, you have the option of setting all the config using code like this

    @Bean
    public CircuitBreaker fooCircuitBreaker() {
        CircuitBreakerConfig.Builder builder = CircuitBreakerConfig.custom().
                slidingWindowSize(xxx).
                failureRateThreshold(xxx).
                waitDurationInOpenState(xxx)).
                ignoreException(e -> {
                    if (e instanceof HttpStatusCodeException) {
                        HttpStatusCodeException httpStatusCodeException = (HttpStatusCodeException) e;
                        if (httpStatusCodeException.getStatusCode().is4xxClientError()) {
                            return true;
                        }
                    }
                    return false;
                });
        circuitBreakerRegistry.addConfiguration(xxx, builder.build());
        return circuitBreakerRegistry.circuitBreaker(xxx, xxx);
    }
    

    In a case like this, using @Bean is obviously a better way.

提交回复
热议问题