- @Autowired 에 대하여 설명하시오.
- 아래에 대하여 설명하시오.(예습)
- 생성자 주입
- Setter 주입
- 필드 주입
- 스프링부트에서 Datasource를 가져오기 위한 방법은?(해당 라이브러리 정리)
- Datasource 관련 테스트 코드를 작성하시오.
@Autowired
- 의존성 주입 수행
- Spring이 해당 타입의 빈을 넣어주는 것
- DI(Dependency Injection)
- 사용 방법 : 객체 생성 방법과 유사한 모습을 보인다.
- 필드 주입
- 생성자 주입
- 메서드 주입(Setter)
@Autowired의 사용 방법
@Autowired
private MyService myService;
@Autowired
public MyClass(MyService myService) {
this.myService = myService;
}
@Autowired
public void setMyService(MyService myService) {
this.myService = myService;
}
pom.xml에 관련 라이브러리가 있고
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
application.properties에서 관련 설정을 해놨다면
#datasource (oracle)
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=scott
spring.datasource.password=tiger
해당 테스트 파일을 실행했을 때 에러가 발생하지 않는다.
package edu.sejong.ex.database;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
// 데이터소스(커넥션 풀 테스트)
// 테스트를 위한 웹 프로그래밍 환경 구축
@SpringBootTest
class DataSourceTest {
// 커넥션 풀 객체
// 주입 키워드
@Autowired
private DataSource dataSource;
@Test
void testConnection() {
assertNotNull(dataSource);
System.out.println("DS = " + dataSource);
try(Connection conn = dataSource.getConnection()) {
System.out.println("conn = " + conn);
// conn의 데이터 타입이 Connection인가?
// Connection 클래스의 인스턴스인지 아닌지를 확인하는 것.
assertThat(conn).isInstanceOf(Connection.class);
// Statement stmt = conn.createStatement();
// ResultSet rs = stmt.executeQuery("select 100 from dual");
PreparedStatement pstmt = conn.prepareStatement("select 100 from dual");
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
System.out.println(rs.getLong(1));
assertEquals(100, rs.getLong(1));
}
// stmt.close();
pstmt.close();
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
테스트 실행 결과(붉은 줄로 표시한 부분 : 콘솔로 나오도록 표현한 메세지)
