스프링 @Configuration, @Bean, @Component, @Service, @Repository 소개 및 오라클12C, Spring JDBC를 이용한 데이터 INSERT 실습
http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=858

n 클래스 레벨에서 사용되는 @Configuration은 스프링 IoC 컨테이너에게 클래스가 자바 빈을 만드는(구성하는) 클래스임을 알린다.
n 메소드 레벨에서 사용되는 @Bean은 개발자가 만들지 않는 외부 라이브러리의 객체들을 빈으로 등록할 때 사용된다. 물론 개발자가 만든 클래스도 빈으로 만들 수 있지만 개발자가 만드는 클래스들은 주로 @Component, @Service, @Repository 등의 어노테이션을 이용하여 등록한다.
@Configuration
public class Config {
@Bean
public Emp getService() {
return new Emp();
}
@Bean
public MyClass1 getArrayList() {
return new ArrayList();
}
}
@Component
n @Component, @Service, @Repository 등의 어노테이션을 이용하여 등록한 빈을 @Autowired를 이용하여 주입한다.
n @Component는 스프링 IoC 컨테이너에서 관리되는 자바 빈(객체)임을 표시하기 위해 사용하는 기본적인 어노테이션으로 주로 DTO, VO 용도의 클래스에 대해 주로 사용한다.
n @Service는 비즈니스 로직이나 영속성 계층(Respository Layer)의 클래스를 호출하는 클래스에 사용된다. 기능적으로는 @Component와 동일하다.
n @Repository는 DB쪽 데이터 처리를 위한 Data Repository, DAO 클래스임을 나타내는 어노테이션이다. @Component와 기능적으로 동일하지만 @Repository는 발생되는 Unchecked Exception을 Spring의 Runtime 예외인 DataAccessException으로 처리할 수 있게 해준다. DataAccessException은 DAO에서 상용구 catch-and-throw 블록 및 예외 선언을 작성하지 않고도 예외를 처리 할 수 있다.
n 실습(Spring JDBC를 이용한 오라클 사원(Emp) 테이블 Data Insert)
n 오라클쪽에 실습용 테이블 생성
create table emp3 (
empno number primary key,
ename varchar2(50)
);
n 프로젝트 구조

n 1. 이클립스에서 file >> new >> project, maven project



n pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo1</name>
<description>demo1</description>
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
<spring.version>5.2.3.RELEASE</spring.version>
<oracle.version>12.2.0.1</oracle.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>https://maven.xwiki.org/externals/</url>
</repository>
</repositories>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
n Emp.java
package entity;
public class Emp {
private String empno;
private String ename;
public Emp(String empno, String ename) {
this.empno = empno;
this.ename = ename;
}
public String getEmpno() {
return empno;
}
public void setEmpno(String empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
}
n EmpRepository.java
package repository;
import entity.Emp;
public interface EmpRepository {
void save(Emp e);
}
n EmpRepositoryImpl.java
package repository;
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import entity.Emp;
@Repository
public class EmpRepositoryImpl implements EmpRepository {
@Autowired
private DataSource ds;
private JdbcTemplate jdbcTemplate;
@PostConstruct
private void postConstruct() {
jdbcTemplate = new JdbcTemplate(ds);
}
public void save(Emp e) {
String sql = "insert into emp3 (empno, ename) values (?, ?)";
jdbcTemplate.update(sql, e.getEmpno(), e.getEname());
}
}
n EmpConfig.java
package config;
import javax.sql.DataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
@ComponentScan(basePackages="service, repository")
public class EmpConfig {
@Bean
public DataSource dataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:ORCL");
dataSource.setUsername("scott");
dataSource.setPassword("tiger");
return dataSource;
}
}
n EmpApplication.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import config.EmpConfig;
import entity.Emp;
import service.EmpService;
public class EmpApplication {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(EmpConfig.class);
EmpService empService = ctx.getBean(EmpService.class);
empService.saveEmp(new Emp("1111", "홍길동"));
empService.saveEmp(new Emp("2222", "김길동"));
System.out.println("Emp Inserted!!");
}
}
#스프링Ioc, #스프링강좌, #스프링강의, #스프링교육, #Autowired, #스프링자바설정, #스프링Config, #스프링프레임워크, #Spring강의, #Spring주입, #스프링주입, #SpringIoC, #스프링IoC, #스프링컨테이너
댓글 없음:
댓글 쓰기