본문 바로가기
dev/Spring

[Spring] Bean 생성

by dev_Step 2022. 3. 4.

Bean 설정을 하면서 Bean 생성이 뭐 어떻게 되는거지 라는의문점이 생겨서 직접 JAVA로 Bean을 생성해 봤다.

일반 Bean의 속성에 대해서 알아보자면

   class : 정규회된 자바 클래스 이름

   id : bean의 고유 식별자

   scope : 객체의 범위(Singleton, Prototype)

        -singleton : 하나의 Bean정의에 대해 Spring IocContainer 에서 단 하나의 객체만 존재, (default : singleton)

        -prototype : 하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있음

   constructor-arg : 생성자에 전달할 인수

   property : 생성시 Bean setter에 전달할 인수

   init Method와 Destory Method

 

첫번째 DataSource를보자면 

HikariConfig 객체를 생성하여 property 를 주입해주는데 set매서드를 통해서 

이렇게 생성된 HikariConfig 객체를 HikariDataSource객체에 생성자 매서드로 추가해준 모습입니다.

여기서 HikariDataSource 는 DataSource를 상속하고 있으므로 리턴타입이 DataSource여도 리턴이 가능합니다.

 

두번째를 보면 

<bean id="sqlSessionFactory" class="~~~.SqlSessionFactoryBean">임의 볼수있는데

id="sqlSessionFactory"인이유는 SqlSessionFactory를 등록하기 위하여 SqlSessionFactoryBean을 사용하는 부분으로

SqlSessionFactoryBean객체에다가 dataSource객체를 생성자 메서드로 주입한 후 ~~.getObejct() 하여 

SqlSessionFactoy 객체를 반환 받습니다.

 

 

JUnit을 통해서 테스트 할때 ojdbc8 dependency 를추가 하지 않아서 발생한 에러

Caused by: java.lang.RuntimeException: Failed to load driver class oracle.jdbc.driver.OracleDriver in either of HikariConfig class loader or Thread context classloader
at com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:491)

]

입니다. 추가해주고 나서 확인하니 정상 테스트 되었습니다.