source

@Bean과 @Autowired의 차이점

factcode 2022. 9. 17. 09:47
반응형

@Bean과 @Autowired의 차이점

왜 사용할 수 없는가@Autowired엔? in in??

@SpringBootApplication
public class Application {

    @Autowired
    BookingService bookingService;

    public static void main(String[] args) {
        bookingService.book("Alice", "Bob", "Carol");
    }
}

이렇게 쓸 수 요.@Bean

@SpringBootApplication
public class Application {

    @Bean
    BookingService bookingService() {
        return new BookingService();
    }

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
        BookingService bookingService = ctx.getBean(BookingService.class);
        bookingService.book("Alice", "Bob", "Carol");
    }
}

두 방법은 '생성'이 아닌가요BookingService★★★★★★★★★★★★★★★★★★?

@Bean ★★★★★★★★★★★★★★★★★」@Autowired아주 다른 두 가지 일을 합니다.다른 답변은 좀 더 자세히 설명하지만, 보다 간단한 수준에서 설명합니다.

  • @Bean스프링에게 '여기 이 수업의 예가 있으니 보관해 두었다가 물어보면 돌려주세요'라고 말한다.

  • @Autowired를 들어, '이를 주세요', '이 클래스의 ', '이 클래스의 인스턴스를 만듭니다.@Bean주석'을 참조하십시오.

★★★★★★★★★★★★★★★★★?예에서는에게 봄의 .BookingService 두 번째 에서는 새로운 인스턴스.BookingService에게 그 그 후에 '봄 '봄'에,main()방, 、 돌라고탁탁탁 방탁방방 。

두 에서 두 을 더 .main() 두 가지 해 보세요

@SpringBootApplication
public class Application {

  @Autowired
  BookingService bookingService;

  @Bean
  BookingService bookingService() {
    return new BookingService();
  }

  public static void main(String[] args) {
    bookingService.book("Alice", "Bob", "Carol");
  }
}

「」는,@Bean에게 봄을 .BookingService및 , 。@Autowired용합니니다다

반에서 에 조금 가 없는만, 이 예제가 이 될 것입니다.@Bean되어 있는 과 1등급으로 정의되어 있습니다.@Autowired다른 방법으로요

@Bean
BookingService bookingService() {
    return new BookingService();
}

달기@Bean는 서비스를 스프링응용 프로그램콘텍스트에서 bean(오브젝트의 일종)으로만 등록합니다.이치노력하다

@Autowired
BookingService bookingService;

주석 달기(를) 사용하여 붙이기@AutowiredBookingServicespring Contextspring의 bean)을합니다.

(으)로 @Bean '주석'이 변수에는 '이 삽입됩니다.@Autowired.

이것으로 의심이 풀리길 바랍니다!

이 예에서 @DaveyDaveDave의 훌륭한 답변 대신

@Bean
  BookingService bookingService() {
    return new BookingService();
  }

Booking Service 클래스에서 @Service 주석을 사용할 수 있습니다.

여기서 가장 높은 투표수의 답변이 주장하는 것과 달리, 두 가지는 크게 다르지 않습니다.@Bean 및 @Autowed로 대부분의 경우 호환됩니다.

Car의 인스턴스를 반환하는 @Bean 메서드가 있다고 가정합니다.문자 그대로 빈 메서드를 제거하고 Car 클래스에 @Component를 추가한 후 자동 배선할 수 있습니다.

그리고 역도 성립.@Autowired를 사용하여 인스턴스화한 클래스가 무엇이든 메서드에서 @Bean을 사용하여 @Configuration 주석을 사용하여 클래스 내에서 인스턴스화할 수 있습니다.

@Autowired 대신 @Bean을 사용하는 장소

1>클래스를 변경하여 @Component 주석을 추가할 수 없습니다.따라서 이 주석을 자동 연결할 수 없습니다.

클래스의 인스턴스화를 커스터마이즈 하는 경우.

예를 들어 Resilience 4J Circuit breaker 클래스를 인스턴스화하고 있는 경우 @Bean 메서드 내에서 이 클래스를 실행하면 다음과 같은 코드를 사용하여 모든 설정을 설정할 수 있습니다.

@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);
}

에 관한 좋은 기사를 소개합니다.@Autowired주석: http://www.baeldung.com/spring-autowire

@Autowired주석은 주사 가능품을 정의하여 인스턴스화할 수 있습니다.@ComponentScan("namespace.with.your.components.for.inject")컨피규레이션클래스

@Configuration
@ComponentScan("com.baeldung.autowire.sample")
public class AppConfig {}

모든 컴포넌트는 다음과 같이 표시되어야 합니다.@Component주석입니다.이 명령어는@Bean주석입니다.

@Bean은 bean(태그에 상당)을 작성하기 위한 메타데이터 정의용입니다.@Autowired는 의존관계를 bean에 주입하는 것입니다(참조 XML 태그/아트리뷰트에 상당).

언급URL : https://stackoverflow.com/questions/34172888/difference-between-bean-and-autowired

반응형