설정이 많아지면 복잡한 xml을 건드릴수도 있기 때문에 configuration 클래스로 설정함
dataSourceSimple은 우리가 만든 클래스가아니라 웹용 외부 라이브러리 이기 때문에 컴포넌트 스캔을 할 수 없음 -> bean으로 등록해줘야함! 빈으로 자동 관리되도록.
스프링 빈 객체는 id속성이 필요한데, 이를 적기 위해서는 컴포넌트 스캔시 필요한 어노테이션옆에 괄호열고 프로퍼티를 적어주면 된다.
설정해주지 않으면 클래스 이름으로 자동 설정 된다. (id 대신함, 대소문자 정확히!!)
customerDAOOracle이 SqlSessionFactory를 has-a 관계로 가짐
SqlSessionFactory는 dataSource, config.xml(리소스를 이용해서 마이바티스를) has-a관계로 가짐
-> productDAOOracle이 dataSource를 has-a 관계로 가지고 있다고 말함.
-> dataSource로 dataSourceHikari를 사용
dao : 인터페이스 타입
ds : 인터페이스 타입, 멤버변수의 자료형은 DataSource타입.
-> 인터페이스를 사용하는 것 처럼 보이지만 객체들의 관계에서 보면 인터페이스라는것은 존재하지 않기때문에 그 인터페이스를 구현한 하위클래스를 사용하는 것 처럼 보인다.
-> 클래스로 보면, ProductDAOOracle이 DataSource를 has-a관계로 가지고있지만 객체관계로 보면 SimpleDriverDataSource를 has-a관계로 가지고 있다.
-> 클래스들의 has-a관계와 객체들간의 has-a관계는 다르다. 위에 그림은 객체들간의 관계임.
-> ProductDAOOracle가 HikariDataSource를 가지고 싶다면 설정 자바소스코드에다가 직접 new 객체설정을 하는게 아니라 annotaion이나 configuration 자바 클래스나 xml을 통해서 설!정!을 해주면 된다.
-> 생성자 주입이 아니라 미리 만들어져있는 객체를 주입하는 것 !!!!!!! 원하는 객체를 찾아서 알아서 주입(DI) --> 제어의 역전(IOC)
내가 원하는 객체를 직접 생성하는 것이 아니라 외부(설정파일)에서 가져오는 것!
SimpleDriverDataSource와 HikariDataSource 둘다 DataSource라는 인터페이스를 구현한것.