@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;
주석 달기(를) 사용하여 붙이기@Autowired
BookingService
spring 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
'source' 카테고리의 다른 글
웹 팩을 통한 깜박임이 다른 결과를 반환함 (0) | 2022.09.17 |
---|---|
부호 없는 정수 곱셈 오버플로를 감지하려면 어떻게 해야 합니까? (0) | 2022.09.17 |
자바에는 인라인 함수가 있나요? (0) | 2022.09.17 |
절차를 사용하여 열의 기본값을 변경하는 방법 (0) | 2022.09.17 |
Numpy - 배열에 행 추가 (0) | 2022.09.17 |