[SPRING] @Bean과 @Autowired의 차이점
SPRING@Bean과 @Autowired의 차이점
이 경우 @Autowired를 사용할 수없는 이유는 무엇입니까?
@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를 생성하는 두 가지 방법이 같은 것은 아닌가요?
해결법
-
==============================
1.@Bean과 @Autowired는 아주 다른 두 가지 일을합니다. 여기에 나와있는 다른 답변은 좀 더 자세하게 설명되어 있지만 더 간단한 수준입니다.
@Bean과 @Autowired는 아주 다른 두 가지 일을합니다. 여기에 나와있는 다른 답변은 좀 더 자세하게 설명되어 있지만 더 간단한 수준입니다.
말이 돼? 첫 번째 예제에서는 Spring에게 BookingService의 인스턴스를 제공하도록 요청했지만 Spring을 만들지 않으므로 Spring은 아무 것도 제공하지 않습니다. 두 번째 예제에서, 당신은 BookingService의 새로운 인스턴스를 생성하고, Spring에 그것에 대해 알려주고, 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 주석은 Spring에게 BookingService를 제공하고 @Autowired는이를 사용합니다.
이것은 같은 클래스에서 모든 것을 사용하기 때문에 약간의 의미가없는 예제이지만, 하나의 클래스에 @Bean이 정의되어 있고 @Autowired가 다른 클래스에 정의되어 있으면 유용합니다.
-
==============================
2.
@Bean BookingService bookingService() { return new BookingService(); }
Annotating @Bean은 스프링 애플리케이션 컨텍스트에서 bean (객체의 종류)으로 서비스를 등록한다. 간단히 말해서, 그것은 단지 등록이고 다른 것은 아무것도 아닙니다.
@Autowired BookingService bookingService;
@Autowired를 사용하여 변수에 주석을 추가하면 Spring Application Context에서 BookingService bean (즉, Object)이 삽입됩니다.
(즉) @Bean 어노테이션이있는 등록 된 빈은 @Autowired로 주석 된 변수에 삽입됩니다.
희망이 당신의 의심을 깨끗이!
-
==============================
3.@DaveyDaveDave의 훌륭한 답 예제 대신
@DaveyDaveDave의 훌륭한 답 예제 대신
@Bean BookingService bookingService() { return new BookingService(); }
BookingService 클래스에서 @Service 주석을 사용할 수 있습니다.
-
==============================
4.@Autowired 주석에 대한 좋은 기사가 있습니다. http://www.baeldung.com/spring-autowire
@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 어노테이션을 대체합니다.
from https://stackoverflow.com/questions/34172888/difference-between-bean-and-autowired by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @ComponentScan 주석을 사용하여 여러 경로를 검색하는 방법은 무엇입니까? (0) | 2018.12.28 |
---|---|
[SPRING] Spring, Hibernate 및 C3P0을 사용하여 다중 사용자 웹 응용 프로그램의 연결 풀 관리 (0) | 2018.12.28 |
[SPRING] Spring MVC는 어떻게 여러 사용자를 다루는가? (0) | 2018.12.28 |
[SPRING] JasperReports를 Spring MVC와 함께 사용하는 방법? (0) | 2018.12.28 |
[SPRING] 봄 부팅, logback 및 logging.config 속성 (0) | 2018.12.28 |