본문으로 바로가기

18/12/26

category 수업내용 정리/정리안된 메모 2019. 6. 16. 20:59

18/12/26

[core, context 버젼 하나로 정의하기]

이미지0) 기존 방법

이미지1-1) 버젼 하나로 통합하여 쓰기

pom.xml 상위 부분에 <properties> 태그를 작성해주고 초록색 체크박스 부분에 들어갈 태그는 임의로 (ID, 식별자 개념)으로 적어 준 뒤 사용할 버젼을 적어준다.

이미지1-2) 버젼 하나로 통합하여 쓰기

기존 버젼이 적혀있던 부분에 이미지1-1 에서 식별자 개념으로 적어주었던 태그를 ${'이곳'}에 적어준다.

[스프링프레임워크 기본 컨셉] : MVC패턴을 구현하기 위한 구성요소(객체, bean)들을 스프링 컨테이너에 담아두고 사용하는 것.

[학습내용]

1. 스프링컨테이너 작성방법 

 - 스프링컨테이너를 구현하기 위한 기능을 모아둔 interface로 BeanFactory가 있으며 이것을 상속 받은 것이 ApplicationContext, 그리고 ApplicationContext을 상속 받은 WebApplictionContext가 있다.

2. bean 생성 방법 

 - bean을 포함한 스프링컨테이너를 생성하기 위해서는 처음부터 사용할 bean을 선언하고 스프링 컨테이너를 생성해야 한다. 어떤 bean을 생성할지, 이름은 무엇인지 등을 선언하는 설정파일이 필요하다. 

[복습] : 지난 시간 복습

이미지0) 서비스에 사용 될 DAO bean 등록하는 코드

이미지1) setter를 이용하는 방식과 생성자를 이용하는 방식

<constructor-arg> : 생성자를 활용해서 의존성을 주입하는 방법 

<property name=""> : setter를 활용해서 의존성을 주입하는 방법, name에 들어갈 것은 setter의 이름에서 set을 제외하고, 첫 번째 알파벳을 소문자로 적어준다.

이미지2) test 해보기 

(1) 사용 하고자 하는 applicationContext.xml를 지정해주는 코드이다.​

(2) applicationContext.xml에 등록한 Bean(MemberService)을 가져오는 코드로, MemberService.class 라는 부분은 가져오고자 하는 bean의 타입을 적어주는 부분이다. 저 위치에 적지 않으면 앞 쪽에 형변환 식으로 적어주면 된다.

[scope 속성] : bean의 생명주기(life cycle)를 관리할 수 있는 속성 

이미지0) scope 속성 설명 / 블로그참고 : http://javaslave.tistory.com/45

singleton : 기본 싱글톤 스코프, 객체를 한 번만 만들어서 bean을 얻을 때 마다 같은 객체를 반환

prototype : 어플리케이션에서 요청시 (getBean()) 마다 스프링이 새 인스턴스를 생성

request : HTTP 요청별로 인스턴스화 되며 요청이 끝나면 소멸 (spring mvc webapplication 용도)

session : HTTP 세션별로 인스턴스화되며 세션이 끝나며 소멸 (spring mvc webapplication 용도)

global session : 포틀릿 기반의 웹 어플리케이션 용도. 전역 세션 스코프의 빈은 같은 스프링 MVC를 사용한 포탈 어플리케이션 내의 모든 포틀릿 사이에서 공유할 수 있다

thred : 새 스레드에서 요청하면 새로운 bean 인스턴스를 생성, 같은 스레드에 대해서는 항상 같은 bean 인스턴스가 반환

custom : org.pringframework.beans.factory.config.Scope를 구현하고 커스텀 스코프를 스프링의 설정에 등록하여 사용

이미지1) memberService bean에 scope 속성 추가하기

이미지2) singleton 이 같은 객체를 반환하는지 테스트 해보기 

<scope="prototype"> 로 설정을 하게 되면, 다른 객체라는 문구가 콘솔창에 찍히게 된다.

[초기화, 제거 메서드] : 객체생성시 초기화 메서드나, 소멸 시 소멸메서드를 지정할 수 있다.

블로그 참고 : http://wonwoo.ml/index.php/post/1820  /  http://isstory83.tistory.com/93

이미지0) 초기화, 제거 메서드 등록해보기 * 오타남 inin -> init

간단한 실습을 위해서, 단순하게 sysout으로 해당 메서드가 동작 하는지만 확인하기 위해서 간단하게 memberService 클래스에 이미지와 같이 각각 init과 destroy 메서드를 작성하였다.

이미지1) bean 설정하기

init-method="메서드 이름", destroy-method="메서드 이름" 형태로 bean의 속성 값으로 설정 할 수 있다. 자세한 내용은 블로그 글 참고

[앞서 내용 @ 이용해서 해보기] : 지난 시간 복습

이미지0) applicationContext.xml에 <context:component-scan> 설정하기

Namespaces에서 context를 체크하고 이미지 속 빨간색 체크 박스와 같이 <context:component-scan>을 통해 scan 할 패키지를 입력해준다.

이미지1) bean으로 등록 할 클래스에 @Component 등록하기

dao 클래스도 마찬가지로 @Component를 등록해주고, 의존성이 주입 될 service의 경우 @Autowired를 적어준다.

@Autowired의 타입 우선 매칭으로, 스프링 컨테이너에 등록 된 bean 들 중에서 MemberDao 타입에 맞는 bean을 가져다가, MemberService에 의존성을 주입해주는 것이다.

이미지2) 생명주기 설정해주기

이미지3) 초기화 메서드 등록해주기 

생성 후에, @PostConstruct 소멸 이전 @PreDestroy

[Collection 객체 주입 (Map)] : 소제목

이미지0) 두 개의 Tire가 필요한 이러한 상황에서 의존성 주입은 어떻게 할 까?

이미지0-1) Map을 활용한다.

파라미터 하나가 아니라, 여러개를 받아오기 위해서 Map으로 파라미터를 받아왔다.

이미지1) <property> 태그 어떻게 수정 해야 하는지 설명

이미지2-1) : 기존코드

이미지2-2) : 수정 된 코드

setTire를 호출하면서 Map을 인자로 넘겨주고 있는 코드이다. Map의 구조는 이미지1을 참고하여 작성 방법을 익히도록 하자.

이미지2-3)

이미지0-1에서 적어 주었던 key를 이미지2-2에서 작성 했던 key 값을 적어준다.

이미지3) 결과

두 개의 타이어가 올바르게 의존성주입 된 것을 알 수 있다.

[연습] : 소제목

이미지0) Hyundai.java의 코드

이미지1) applicationContext.xml

(1) Hyundai 클래스 bean 등록, 이때 생성자를 통한 등록을 위해서 <constructor-arg> 태그를 이용 하였으며, 생성자에서 파라미터로 받아오는 것이 Map 이기 떄문에 Map에 대한 key와 value-ref를 설정해주었다.

(2) 맵에서 사용 될 handler와 move를 각각 bean으로 등록해주었다.

이미지2) test 코드와 결과

​​

Spring JDBC

Spring ORM : 다른 프레임워크(ex: MyBatis)로 생성한 DAO를 스프링에서 사용할 수 있도록 도와주는 모듈 

​​

[Spring JDBC를 위한 DAO 작성 및 사용] : 소제목​​

-해야 할 일-

1. DAO 작성 및 bean 등록

2. JdbcTemplate 객체 bean 등록

3. DataSource (DB접속정보 및 설정값을 포함하는 객체) bean 등록 

이미지0) 실습을 위한 pom.xml 작성

총 4개의 라이브러리를 추가한 모습을 볼 수 있다. 

이미지1) JbdcTemplate 클래스가 지원해주는 작업들

[DAO 만들기 준비단계]

이미지2-1) name="값" 자동완성 되는 목록 

이미지2-2) 접속정보를 모두 입력 한 모습

DB에 접속하려면 url, username, password, DriverName을 알아야 한다.해당 정보를 Spring에서 관리하기 위해, DataSource라는 클래스의 객체를 이용한다.

이때 해당 객체의 settet를 이용하는 것이기에, <property> 태그 속송을 이용하며, 우리가 입력하는 것은 단순한 문자열 이기 때문에, value="값" 을 이용해서 정보를 입력해준다.​

이미지3) jdbcTemplate bean 등록하기

연결, 예외처리, 자원관리, sql 실행, 결과처리 등의 역할을 하는 객체를 bean으로 등록하는 모습이다.

name에 적힌 것은 jdbcTemplate의 setter 이름이며, ref를 통해서 앞서 (이미지2)에서 만든 dataSource을 이용해서 의존성을 주입해준다.

이미지4)DAO에 setJdbcTemplate 작성(.java) 및 bean으로 의존성 주입 (applicationContext.xml)

[본격적인 DAO 작성]

이미지0) DAO 인터페이스 작성

이미지0-1) MemberDao implements IMemberDao 하기

이미지1-1) spring이 하는 것과 개발자가 하는 것 

이미지1-2) insert 작성

이미지1-3) 테스트

이미지2-1) select 작성하기 위한 Mapper

결과를 조회하기 위해서는 어떤 칼럼이 어떤 속성에 들어가야 하는지 알려주는 Mapper가 필요하다. 멤버변수로 선어하고 자동완성 기능을 사용하면 익명클래스 (인터페이스를 상속받는) 생성이 된다. 그 이후 내용과 리턴을 적절하게 작성해주면 된다.

이미지2-2) RowMapper를 활용한 selectOne 과 selectAll

selectAll의 경우 RowMapper가 반활 할 값이 여러개 일 경우 알아서 List를 반환하기 때문에, 별도의 추가 작성 작성 할 필요가 없다.

이미지) 앞선 내용 model 안 쓰고 Map 으로 코드 작성 해보기 

이미지) 테스트

'수업내용 정리 > 정리안된 메모' 카테고리의 다른 글

[MyBatis와 Spreing 연동하기]  (0) 2019.06.16
18/12/31​  (0) 2019.06.16
18/12/28  (0) 2019.06.16
003  (0) 2019.06.16
18/12/24  (0) 2019.06.16