container

1.스프링 컨테이너(Bean Factory)
빈객체를 관리하고 각 객체가 의존관계를 설정해주는 컨테이너 
대표적 구현클래스 : XmlBeanFactory
외부 자원으로부터 설정정보를 읽어와 빈 객체를 생성함 

2.스프링 컨테이너(ApplicationContext)
BeanFatory 인터페이스를 상속받은 하위 인터페이스
메세지의 국제화 , 리소스의 관리 및 로딩, 이벤트 처리 
대표적 구현클래스 : GenericXmlApplicationContext
이객체들은 context.getBean()로 가져올수있다. 
Beanfatory는 단순히 컨테이너 객체를 생성하고 DI를 처리해주는 기능을 제공한다. 하지만 스프링을 사용하는 이유는 다양한 부가기능(편리한 트랜잭션, 자바 코드기반 스프링 설정, 애노테이션을 사용한 빈설정, 메시지 처등 ) 때문이다. 그리고 이런 기능을 사용하기 위해선 beanfatory만 사용하는 것은 매우 드물며 applicationContext계열을 사용한다. 

applicationContext 인터페이스와  관련된 클래스 계층 구조에서 제일 하단의 것으로 실제 사용되는 클래스 목록이다.
-GenericXMLApplicationContext : XML파일을 설정 정보로 사용하는 스프링 컨테이너 구현 클래스이다. 독립형 어플리케이션을 만들때 사용한다. 3.0부터 추가되었으며 그전에는 classPathXmlApplication(클래스패스에서 설정파일을 읽어온다) + FileSystemXmlApplicatio(로컬파일에서 설정파일을 읽어온다 )이 대신함 
-AnntationConfigApplicationContext: 자바코드를 설정 정보로 사용하는 스프링컨테이너 
-GenericGroovyApplicationContext: 그루비 언어로 작성될 설정정보를 사용하는 스프링컨테이너
-XmlWebApplicationContext: 웹 어플리케이션을 개발할때 스프링 컨테이너로써 xml파일을 설정 정보로 사용한다.
-AnnotationConfigWebApplicationContext: 웹 어플리케이션을 개발할때 사용하는 스프링 컨테이너 

3.스프링 컨테이너(WebApplicationContext)
모든 클래스 파일이 이 부분에 올라가는 것이 아닌 context-scan 관련 어노테이션 클래스파일만 업로드되어 객체가 생성된다. 
이 객체들을  getBeanDefinitionNames();로 가져올수있다.
dispatcherServlet이 xx-servlet.xml을 읽어와 webApplicationContext를 만든다. 나머지 설정 xml파일은 contextLoadListener또는 
ContextLoaderServlet이 webapplication을context를 만들때 사용한다.
이 webapplicaionContext는 applicationContext를 상속받아 여러 서블릿이 공통으로 사용하는 빈들을 사용할수 있게 된다. 
그렇기 때문에 만들어지는 순서가 중요하다. 
ContextLoaderServlet을 사용했을 때는 load의 설정 값을 1을 주어 ApplicationContext를 DispatcherServlet보다 먼저 만드다. 
이 설정을 하는 이유는 DispatcherServlet이 하나의 Web Application에 여러개일 수 있기 때문이다.
여러 개의 DispatcherServlet에서 공통으로 사용할 빈들을 상위 ApplicationContext에 선언해두어 공유할 수 있게 하는 것이다.

컨테이너의 생성과 종료 
-컨테이너 생성
-빈 메타정보(xml이나 자바기반설정)를 이용해서 빈 객체 생성
xml 
GenericXmlApplication ctx = new GenericXmlApplication();
ctx.load( "classpath:config.xml" ); // 메타 정보 제공 및
ctx.refresh(); //읽어온 메타정보로 빈 객체 재생성
java
GenericXmlApplication ctx = new GenericXmlApplication();
ctx.register( config.class )
ctx.refresh(); 
refresh는 초기화 과정이기도 하므로 반드시 실행되어야한다. 
-컨테이너 사용
-컨테이너 종료 
일반적으로 close()를 호출하지만 강제종료일때 registerShutdownHook()을 사용한다. 

bean

스프링 컨테이너는 빈객체를 생성하고 초기화하고 소멸한다. 
그리고 그 단계마다 빈  객체의 매서드를 실행한다. 
1.빈객체 생성
2.빈 프로퍼티 설정
3.BeanNameAware.setBeanName() //빈생성시 컨테이너에서 빈이름을 전달받는다. 
4.ApplicationContextAware.setApplicationContext() //빈생성시 컨테이너를 전달 받는다. >> 컨테이너 기능 사용가능 
5.BeanPostProcessor의 초기화 전처리
6.초기화 
6-1.@postConstruct
6-2.InitializingBean.atferPropertiesSet()
6-3. 커스텀 init 메서드
7.BeanPostProcessor의 초기화 후 처리 
8.빈객체의 사용
9.소멸
9-1.@preDestory 메서드 
9-2.DisposableBean.destory()
9-3.커스텀 destory 메서드 
*<context:annotation-config>를 사용하면 CommonAnnotationBeanProcessor가 빈으로 등록되면서 초기화,소멸 ( 6-1, 9-1 )사용가능

*커스텀 메소드는 bean태그에서 init-method , destory-method를 사용하면 된다. 




'STUDY > SPRING' 카테고리의 다른 글

TRANSACTION  (0) 2018.11.06
MVC  (0) 2018.11.02
[코드로 배우는 스프링 웹프로젝트]  (0) 2018.10.31
Annotation  (0) 2018.10.30
[코드로 배우는 스프링 웹프로젝트] PART 1. 프로젝트의 기본구조 구성  (0) 2018.10.29

[part. 1 프로젝트의 기본 구조 구성]

1.개발 환경 설정 <page 26>
-sts 설치 / 이클립스( 메이븐 프로젝트 )
-스프링 프로젝트
 Spring Starter Project(Spring Boot) :
 별도의 설정이 없으며 was없이 실행가능하다. / jsp설정은 별도로 해야한다.
 Spring Project :
 현재 실무에서 많이 사용하고 있으며 모든 버전이 스프링에서 사용할수 있으나 초반 테스트 환경 구현이 어렵고  was와 연동하는 경우 리소스 추가요구된다.
이책은  Spring Project 로 Spring Legacy project 를 사용한다.
sts >> file > new project > Spring Legacy project > spring MVC project
-maven : poem.xml의 dependency 부분 확인할것 (.m2)
-tomcat 9.0 / java 1.8 / mysql 6.3.9 / mybatis 

2.스프링의 간단한 소개 <page 49>
-프레임워크
   뼈대가 완성, 조립식 가능 
-POJO기반구성
   엔터프라이즈급 프로젝트 시스템의 복잡성으로 인한 실패 >> 이로 인해 만들어진 경량 프레임워크로 관계시  apI를 사용하지 않는 POJO의 구성으로 가능하도록 제작되었음 >> 유연성, 확장성, 디커플링
-의존을 통한 객체 간의 관계 구성
   DI(Dependency injection ) 의존
      외부에서 필요한 객체를 직접 결정하기 때문에 의존 관계를 직접 처리할 필요없고 인터페이스를 통해 유연
      한 구조 개발 가능(생성자, set메소드)
      객체를 생성하면 각 객체를 연결해주는 조립기 역할을 한다.: GenericXmlApplicationContext클래스가 xml 파일의 설정정보를
      읽어와 객체를 생성하고 연결한뒤 내부적으로 보관한다. 이렇게 생성한 객체를 보관하기 때문에 컨테이너라고 부른다. 그리고 이 
      생성된 객체들을 빈이라고 부른다. 
   IoC( Inversion of Control )  제어의 역행
      메소드나 객체의 호출작업을 외부에서 결정 >> 프레임워크에  필요한 부품을 만들고 조립가능 >> 구조를       설계할수있도록 만들어짐 
-AOP(Aspect oriented Programming)
  비즈니스 로직(core-concern)에만 집중할수있도록 횡단 관심사(cross-concern  ex 로깅, 트랜잭션)를 분리

3.예제를 위한 MySQL의 설정과 스프링테스트

4.스피링 + MyBatis + Mysql 설정

5.모델 2방식의 스프링 MVC
<목요일 진행예정>

controller  <page 105>

리다이렉트 경우 파라미터 RedirectAttributes 로 받아 속성 addFlashAttribute를 사용한후 

리턴을 return "redirect: /@RequestMapping사용

JSON 데이터를 생성하는 경우 리턴타입 @ResponseBody 클래스 반환 


6.스프링 + Mybatis <page 126>

-mysql : book_ex스키마에 tbl_member 생성

create table tbl_member (
    userid varchar(50) not null,
    userpw varchar(50) not null,
    username varchar(50) not null,
    email varchar(100),

    regdate timestamp default now(),
    updatedate timestamp default now(),
    primary key(userid)
)

timestamp 사용시 서버시간 UTC 기준이므로 timezone 유의

 -도메인 객체를 위한 클래스 설계 

도메인 :  분리가 가능한 단위 

-DAO인터페이스 작성

-XML Mapper작성

참고사이트 http://www.mybatis.org/mybatis-3

-mybatis-spring에서 xmlMapper인식 

-DAO인터페이스 구현

  sqlSessionTemplete : mybatis의 데이터베이스의 연결을 맺고 작업이 완료된 후 작업을 close 하는 클래스

SqlSessionTemlate은 sqlSessionFactory를 생성자로 주입해서 설정한다. 


첨부파일은 <page 138>까지 실행한 프로젝트 

ex_0.zip


트러블슈팅

에러 : Access denied for user 'zerock'@'localhost'

이유 : mysql 외부 접속 권한 없어 root-context.xml의 dataSource bean을 생성하지못함

해결 : 사용자계정에 권한부여  참고 사이트 : http://withcoding.com/36 




'STUDY > SPRING' 카테고리의 다른 글

TRANSACTION  (0) 2018.11.06
MVC  (0) 2018.11.02
[코드로 배우는 스프링 웹프로젝트]  (0) 2018.10.31
Annotation  (0) 2018.10.30
스프링 컨테이너와 빈  (0) 2018.10.30

같은 것을 봐도 관점에 따라 사람마다 다르다.

그래서 사람들은 각자의 생각으로 다른 해석을 한다.

내가 무엇을 보느냐가 중요한 것이 아니라 어떤 사고를 하느냐가 모든 것을 결정한다. 


어른스럽지 못한 나도 싫지만 아이만도 못한 어른이 되는 것은 더욱 싫다. 

지금 행복이 미래의 나를 만든다. 

미래의 나에게 사과할 만한 선택은 만들지 말자. 

그리고 미래의 나는 반드시 지금보다 나를 더 알고 있어야 한다. 

평생 나자신을 알아가는 것이 숙제이고 나에 대해 사고 하는 것은 숙명이다. 

나를 어떻게 생각하는 타인의 생각보다 나를 위한 것들로만 존재하는 내 시간이 중요햐다.


반드시 그런 선택을 하자.  


'THINK' 카테고리의 다른 글

무제  (0) 2018.10.31
이해  (1) 2018.09.04
2018-09-01  (0) 2018.09.01
온도의 차이  (0) 2018.08.30
2018-08-30  (0) 2018.08.30

+ Recent posts