스프링 컨테이너 구동 시 생성해야 하는 객체(Bean)들과 의존 관계를 Java 파일로 작성하는 방식
스프링 컨테이너가 자바 파일을 설정 파일로 식별하기 위해서는 @Configuration 어노테이션을 클래스에 작성해야 함
@Configuration
public class JavaConfig {
}
자바 파일에서 빈을 선언하기 위해서는 객체를 리턴하는 메소드를 만들고 @Bean 어노테이션을 메소드에 작성해야 함
@Configuration
public class JavaConfig {
@Bean
public Student student() {
return new Student();
}
}
Setter 메소드를 통해 의존 관계가 있는 빈을 주입 가능
@Configuration
public class JavaConfig {
@Bean
public Student student() {
Student student = new Student();
student.setName("홍길동");
student.setWallet(wallet());
return student;
}
@Bean
public Wallet wallet() {
return new Wallet();
}
}
생성자를 통해 의존 관계가 있는 빈을 주입 가능
@Configuration
public class JavaConfig {
@Bean
public Student student() {
return new Student("홍길동", wallet());
}
@Bean
public Wallet wallet() {
return new Wallet();
}
}
@Import 어노테이션을 사용하여 다른 Java 설정 파일을 가져오는 것이 가능
@Configuration
@Import(Config.class)
public class JavaConfig {
}
3.3. 어노테이션 방식
스프링 컨테이너 구동 시 생성해야 하는 객체(Bean)들과 의존 관계를 어노테이션을 사용하여 구성하는 방식
어노테이션으로 빈을 선언하기 위해서는 빈으로 생성하고 싶은 클래스에 @Component을 작성해야 함
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private String name;
private Wallet wallet;
}
@Component 어노테이션이 작성된 클래스를 빈으로 생성하기 위해서는 컴포넌트 스캐닝(Component Scannig)을 통해서 스프링 컨테이너 구동 시 해당 클래스를 찾아 빈으로 등록하도록 설정해야 함
<!-- XML 방식 -->
<beans>
<context:component-scan base-package="com.ismoon.spring" />
</beans>
// Java 방식
@Configuration
@ComponentScan("com.ismoon.spring")
public class JavaConfig {
}
@Autowired 어노테이션을 사용하여 스프링 컨테이너에서 빈을 찾아 자동으로 의존성 주입 가능
@Autowired 어노테이션은 필드, 메소드, 생성자에 적용 가능
@Value 어노테이션을 사용하여 빈이 아닌 값을 주입 가능
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
@Value("홍길동")
private String name;
@Autowired
private Wallet wallet;
}
Connection 객체를 통해 데이터베이스에 SQL 구문을 전달하여 실행시키고 결과를 반환받는 역할을 하는 객체
Statement 객체는 직접 생성이 불가능하고 Connection 객체의createStatement()메소드를 호출하여 Statement 객체를 생성 가능
Statement stmt = connection.createStatement();
SQL 구문의 종류에 따라 실행에 필요한 메소드가 달라짐
// SELECT 쿼리 실행 (ResultSet 객체를 리턴한다.)
ResultSet rs = stmt.executeQuery("SELECT * FROM emp");
// INSERT, UPDATE, DELETE 쿼리 실행 (정수값을 리턴한다.)
int result = stmt.executeUpdate("DELETE FROM emp WHERE emp_no = 10")
2.4. PreparedStatement
SQL 구문을 미리 컴파일 하고 실행 시간 동안 인수 값을 위한 공간을 확보한다는 점에서 Statement와 다
PreparedStatement 객체는 직접 생성이 불가능하고 Connection 객체의prepareStatement()메소드를 호출하여 PreparedStatement 객체를 생성 가능