스프링의 구성요소, 생성자 주입방법(constructor-arg), 기본자료형 주입방법(properties), Annotation(@Component, @Service, @Repository, @Controll, @AutoWired, @Resource), 스프링에서 jdbc 사용하기

2019. 6. 26. 18:20Spring

--------------------------스프링 구성요소 (모듈 구성요소)--------------------


Core
        - String Container 지원 모듈
                spring-core.jar
                spring-context.jar
                spring-beans.jar

AOP
        - 관점지향 프로그래밍 지원 모듈
                spring-aop.jar

DAO
        - 데이터베이스 엑세스 지원 모듈
                spring-jdbc.jar
                spring-tx.jar

ORM
        - ibatis, JPA, Hibernate와 같은 데이터베이스엑세스를
          연동을 지원하는 모듈
                spring-orm.jar

Web
        - MVC 패턴의 웹 애플리케이션 지원 모듈
                spring-web.jar
                spring-mav.jar

Test
        - 당위테스트를 지원하는 모듈
                spring-text.jar



///////////////////////////생성자 주입방법

Constructor Injection
                생성자 메소드 정의하고,
                 태그를 사용해서 조립된 빈을 지정한다.

 



예시) 생성자(constructor-arg) 주입과 setter 주입 알아보기
demo6

Goodmorning.java



Goodbye.java



MessageService.java



demo6.xml






///////////////////////기본 자료형 연결하고 properties파일 사용하기

기본자료형 연결하기
        기본자료형(boolean, int, doublie)과 문자열을 주입할때는 
        Setter 주입의 ref와 다르게 value 속성을 활용한다.
        또한 properties파일을 사용할 경우 value에 ${...}표현식으로 넣어준다.


예시) 기본자료형 연결하기
demo7

EmailService.java



demo7.xml

※. context 추가하기
demo7.xml 하단의 Namespace 클릭 -> context 선택


아래처럼 추가된다.



mail-config.properties


※. 만약 값이 길어서 엔터를 해야한다면 마지막에 \를 쓰면 아래와 이어진다.

Demo7App.java








//////////////////////////Annotation 기반의 빈 설정,  @Autowired

Annotation 기반의 빈 설정
        - 스프링 프레임워크는 xml설정파일 대신 Annotation을 사용해서
          빈 설정을 할 수 있다.

        1. 빈 자동감지 지원 Annotation
                - @Component, @Service, @Repository, @Controller등의           
                  Annotation이 표시된 클래스는 XML 설정없이 자동으로 스프링의 
                  빈(객체)로 등록된다.
                        ※. Component  : 범용적으로 사용된다.
                           Service    : 업무로직에 붙인다.
                           Repository : DB관련에 붙인다.
                           Controller : 컨트롤러에 붙인다.

                - Bean 설정 파일에 아래의 태그를 추가하고, 스캔할 클래스가
                  포함된 패키지 졍로를 설정한다.
                        
                        
                  * 상위패키지를 경로로 지정하면 하위 패키지의 클래스로 스캔한다.

        2. 자동으로 빈 묶기(AutoWiring)
                - @AutoWired, @Resource Annotation을 사용해서
                  스프링 컨테이너에 등록된 빙들을 자동으로 주입하는 것이다.
                - @AutoWired는 클래스의 멤버변수, Setter메소드, 생성자에 붙일 수 있다.
                - @AutoWired는 스프링 컨테이너에 등록된 빈들 중에서 같은 타입의 객체를 찾아서
                  자동으로 주입한다.
                  * 만약 같은 타입의 객체가 두 개이상 존재하면 에러가 발생한다.
                  * @Resource 를 써도 자동으로 되지만 사실 용도가 다르다.
                - @Resource는 @AutoWired와 같은 동작을 수행한다.
                  @Resource(name="빈의 이름")과 같은 형식으로 정의하면
                   지정된 빈의 이름과 일치하는 빈이 조립된다.




예시)Annotation과 autoWiring 사용하기

HomeService.java



LoginService.java



ProductDao.java



UserDao.java



UserService.java

 

demo8.xml



Demo8App.java






예시) resource 사용하기

OrderDao.java



OrderOracleDao.java



OrderMySQLDao.java



OrderService.java






예시) 기본자료형을 Annotation으로 등록하기

MailConnectService.java



demo9.xml



mail-config.properties



demo9App.java



실행결과

 




/////////////////////////스프링에서 jdbc사용하기
       

Spring의 데이터베이스 엑세스
        1. 데이터베이스 엑세스에 필요한 Connection을 제공하는 ConnectionPool객체가 필요하다.
        2. CRUD기능이 구현된 xxxTemplate 객체가 필요하다.
                * 스프링은 데이터베이스 엑세스 작업에서 반복적으로 수행하는 작업을 미리 구현해놓은
                  템플릿클래스를 제공한다.
                        JDBC 기술 사용        - JdbcTemplate를 스프링의 빈으로 등록
                        ibatis 기술 사용      - SqlMapClientTemplate를 스프링의 빈으로 등록
                        jpa 기술 사용         - JpaTemplate를 스프링의 빈으로 등록

        3. 데이터베이스 작업을 구현하는 DAO에는 xxxTemplate를 주입(제공)해야한다.
                * DAO에서 xxxTemplate에 구현된 CRUD기능을 사용한다.

 

 

 

예시) 데이터베이스 연결해서 Job테이블 insert하기

 

Job.java

 

context.xml

 

jobDao.java

 

JobApp.java

 

실행결과 - 아래와 같이 두줄이 나오면 잘된것이다.