@Service
public class BookService {
BookRepository bookRepository;
@Autowired
public void setBookRepository(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
}
public class BookRepository {
}
@Service
public class BookService {
BookRepository bookRepository;
@Autowired(required = false)
public void setBookRepository(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
}
@Service
public class BookService {
@Autowired(required = false)
BookRepository bookRepository;
}
@Service
public class BookService {
@Autowired
BookRepository bookRepository;
}
public interface BookRepository {
}
@Repository
public class MyBookRepository implements BookRepository {
}
@Repository
public class KeesunBookRepository implements BookRepository {
}
@Repository
@Primary
public class KeesunBookRepository implements BookRepository {
}
class me.whiteship.autowired.KeesunBookRepository
@Service
public class BookService {
@Autowired
@Qualifier("keesunBookRepository")
BookRepository bookRepository;
public void printBookRepository() {
System.out.println(bookRepository.getClass());
}
}
@Repository
public class KeesunBookRepository implements BookRepository {
}
@Repository
public class KeesunBookRepository implements BookRepository {
}
@Repository
public class MyBookRepository implements BookRepository {
}
@Service
public class BookService {
@Autowired
List<BookRepository> bookRepositories;
public void printBookRepository() {
this.bookRepositories.forEach(System.out::println);
}
}
@Service
public class BookService {
@Autowired
// 이름 지정
BookRepository myBookRepository;
public void printBookRepository() {
System.out.println(myBookRepository.getClass());
}
}
@Service
public class BookService {
@Autowired
BookRepository myBookRepository;
// 이제 Runner는 필요없다.
@PostConstruct
public void setup() {
System.out.println(myBookRepository.getClass());
}
}
2020-03-16 13:33:18.519 WARN 14600 --- [ main] o.s.boot.StartupInfoLogger : InetAddress.getLocalHost().getHostName() took 5005 milliseconds to respond. Please verify your network configuration (macOS machines may need to add entries to /etc/hosts).
2020-03-16 13:33:23.524 INFO 14600 --- [ main] me.whiteship.autowired.DemoApplication : Starting DemoApplication on macbook.local with PID 14600 (/Users/sojeong/dev/IntelliJ-workspace/spring-keesun-baik/spring-framework-core-02-autowired/target/classes started by sojeong in /Users/sojeong/dev/IntelliJ-workspace/spring-keesun-baik)
2020-03-16 13:33:23.525 INFO 14600 --- [ main] me.whiteship.autowired.DemoApplication : No active profile set, falling back to default profiles: default
2020-03-16 13:33:24.073 INFO 14600 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2020-03-16 13:33:24.079 INFO 14600 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2020-03-16 13:33:24.079 INFO 14600 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.31]
2020-03-16 13:33:24.121 INFO 14600 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2020-03-16 13:33:24.121 INFO 14600 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 566 ms
// @PostConstruct가 출력되는 위치
class me.whiteship.autowired.MyBookRepository
2020-03-16 13:33:24.219 INFO 14600 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-03-16 13:33:24.342 INFO 14600 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-03-16 13:33:24.347 INFO 14600 --- [ main] me.whiteship.autowired.DemoApplication : Started DemoApplication in 16.071 seconds (JVM running for 21.668)
// Runner가 출력되는 위치
@Component
public class BookServiceRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
AutowiredAnnotationBeanPostProcessor bean
= applicationContext.getBean(AutowiredAnnotationBeanPostProcessor.class);
System.out.println(bean);
}
}