반응형
김영한님의 "스프링 DB 1편 - 데이터 접근 핵심 원리" 강의를 듣다가 궁금한 점이 생겼습니다
강의 도중 아래와 같은 동작을 하는 코드를 실행하는데요
import java.sql.Connection;
import java.sql.DriverManager;
public class Utils {
public static Connection getConnection() {
try {
Connection connection = DriverManager.getConnection(URL, USARNAME, PASSWORD);
return connection;
} catch (SQLException e) {
throw new IllegalStateException(e);
}
}
}
아래와 같이 H2 database Driver를 사용하는 프로젝트입니다
// build.gradle
dependencies {
runtimeOnly 'com.h2database:h2'
}
DriverManager.getConnection() 메서드는 어떻게 H2 Driver를 골라서 찾아내는지에 대해서 궁금증이 생겼습니다
결론적으로는 리플렉션(ServiceLoader)을 이용해서 인스턴스를 찾아내는 것이었습니다
DriverManager.getConnection() 메서드를 호출하면 아래 코드를 실행하게 됩니다
public class DriverManager {
private static void ensureDriversInitialized() {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
Iterator<Driver> driversIterator = loadedDrivers.iterator();
}
}
}
}
서비스회사에서 일하고 있지만 아직도 자바에 부족한 부분이 많네요 ㅠㅠ
반응형
'소프트웨어' 카테고리의 다른 글
ChatGPT 장애 (Oops! Our systems are ...) (0) | 2023.11.23 |
---|---|
java.lang.UnsupportedOperationException 발생 케이스 (0) | 2022.12.31 |
정적 팩터리 메서드는 생성자보다 좋을까? (0) | 2021.09.15 |
Spring - 중복 타입으로 자동주입 (0) | 2021.09.04 |
406 Not Acceptable HttpMediaTypeNotAcceptableException (1) | 2021.08.21 |