180322 SPRING 프레임워크 - RYUDONGJIN/Memo_wiki GitHub Wiki

Spring 프레임워크

  • 자바 언어를 기반으로 다양한 어플리케이션을 제작하기 위한 약속된 프로그래밍
  • 톰캣을 이용하며 EJB에 비해서 코드의 경량화 그리고 개발 중에 테스트가 쉬움.
  • 자바 엔터프라이즈 어플리케이션 개발에 필요로 하는 기능을 제공하는 오픈소스 경량급 어플리케이션 프레임워크

스프링 IoC(Inversion of Control) 컨테이너

  • 설정파일을 이용해서 어플리케이션을 구성하는 자바 객체를 생성하고 관리

DI(Dependency Injection)

  • 설정파일이나 에노테이션을 통해 객체의 생명주기와 의존관계를 설정

AOP(Aspect Oriented Programing)

  • 상속을 통한 방법에 한계가 있어서 등장, 핵심기능과 공통 기능을 분리 시켜놓고, 공통 기능을 필요로 하는 핵심 기능들에서 사용하는 방식
  • 공통 기능을 핵심 기능과 분리해놓고, 공통 기능 중에서 핵심 기능에 적용하고자 하는 부분에 적용하는 것
  • 트랜잭션, 로깅, 보안과 같은 엔터프라이즈 서비스를 적용하고 깔끔한 코드를 유지
  • Aspect : 공통 기능
  • Advice : Aspect의 기능 자체
  • Joinpoint : Advice를 적용해야 되는 부분(ex.필드, 메소드)
  • Pointcut : Joinpoint의 부분으로 실제로 Advice가 적용된 부분
  • Weaving : Advice를 핵심 기능에 적용하는 행위

Advice 종류

  • aop:around : 메소드 실행 전/후 및 exception 발생시 advice 실행
  • aop:before : 메소드 실행 전에 advice 실행
  • aop:after-returning : 정상적으로 메소드 실행 후에 advice 실행
  • aop:after-throwing : 메소드 실행 중 exception 발생시 advice 실행
  • aop:after : 메소드 실행 중 exception이 발생하여도 advice 실행

@Aspect를 이용한 AOP구현

    1. 의존 설정(pom.xml)
    1. @Aspect 어노테이션을 이용한 Aspect클래스 제작
    1. XML파일에 aop:aspectj-autoproxy/ 설정

POJO(Planin Old Java)

  • 자바 객체는 특정한 인터페이스를 구현하거나 클래스를 상속받지 않음
  • 일관된 트랜잭션 처리 : JDBC, JTA 컨테이너 제공 트랜잭션 구분 없이 동일한 코드를 여러 환경에서 사용

스프링 장점

  • 단순함
  • 목적을 이룰 수 있는 단순하고 명퀘한 접근 방법
  • 가장 단순한 객체지향적 개발 모델인 POJO 프로그래밍
  • 유연성, 확장성
  • 다른 프레임워크와 편리하게 접목되서 사용

이클립스에 스프링 플로그인 설치 (Spring Tool Suite)

  • help에서 eclipse MarketPlace 에서 sts 검색해서 다운로드

DI(Dependency Injection)와 IOC컨테이너

  • DI
  • 부품을 생성하고 조립하는 라이브러리 집합체

spring 컨테이너 생명 주기

컨테이너 생성 --> GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
컨테이너 설정 --> ctx.load("classpath:applicationCTX.xml");  ctx.refresh();
컨테이너 사용 --> Student student = ctx.getBean("student", Student.class);
컨테이너 종료 --> ctx.close();

Environment 객체

Context ----ctx.getEnvironment()----> Environment ----env.getPropertySources()----> PropertySources

* 프로퍼티 추가 및 추출
추가 : propertySources.addLast()
추출 : env.getProperty()

스프링 모듈

  • core : DI 기능을 비롯한 프레임워크의 기반을 제공
  • beans : BeanFactory 인터페이스를 통해 구현
  • expression : 객체에 접근하고 객체를 조작하기 위한 표현 언어 제공, 통합 EL을 확장
  • context : core와 beans 모듈을 확장해서 국제화, 이벤트 처리, 리소스 로딩, 서블릿 컨테이너를 위한 컨텍스트 생성 등의 기능 제공, ApplicationContext 인터페이스를 통해 구현
  • context.support : Ehcache, 메일, 스케줄링, UI의 Velocity 지원 기능 제공
  • aop : AOP Alliance에 호환되는 AOP 구현을 제공
  • aspects : AspectJ와의 통합을 제공
  • web : 파일 업로드, Locale 처리 등 웹을 위한 통합 기능을 제공, 권격 지원 기능 중 웹 관련 기능을 제공
  • web.servlet : 스프링 MVC를 제공, JSP, Velocity에 대한 뷰 연동을 지원
  • web.struts : 스프링과 스트럿츠 연동 기능을 제공
  • web.portlet : 포틀릿 화녁ㅇ에서 사용되는 MVC 구현 제공
  • transaction : AOP를 이용한 선언적 트랜잭션 관리 및 코드를 이용한 트랜잭션 관리 기능 제공
  • jdbc : JDBC 프로그래밍을 위한 추상 레이어를 제공, JDBC 템플릿을 제공함으로써 간결한 코드로 JDBC 프로그래밍을 할 수 있음
  • orm : 하이버네이트, JPA, iBATIS, JDO 등 ORM API를 위한 통합 레이어를 제공, 스프링이 제공하는 트랜잭션 관리와의 연동 지원
  • oxm : 객체와 XML 사이의 매핑을 처리하기 위한 추상 레이어를 제공, JAXB, Castor, XMLBeans, JiBX, XStream과의 연동 지원
  • jms : JMS의 메시지를 생성하고 수신하는 기능을 제공
  • test : JUnit이나 TestNG를 이용한 스프링 컴포넌트의 테스트를 지원
  • instrument : Instrumentation 지원 클래스를 제공
  • instrument.tomcat : 톰캣 서버를 위한 Instrumentation 지원 클래스를 제공
  • asm : ASM 라이브러리를 재패키징 한 모듈
⚠️ **GitHub.com Fallback** ⚠️