본문 바로가기

소프트웨어

DriverManager는 어떻게 Driver를 찾을까..?

반응형

김영한님의 "스프링 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();
                }
            }
    }
}

 

 

서비스회사에서 일하고 있지만 아직도 자바에 부족한 부분이 많네요 ㅠㅠ

 

반응형