Spring (JAVA framework)
20.11.09 시작
Spring
- 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
스프링 삼각형
- POJO(Plain Old Java Object) 를 기반으로 하는 IOC/DI, AOP, PSA 의 3대 프로그래밍 모델
IOC/DI
- Inversion Of Control / Dependency Injection, 제어의 역전/ 의존성 주입
Bean
- Spring IoC Container가 관리하는 자바 객체를 빈(bean) 이라고 한다.
import org.springframework.context.ApplicationContext;
// ApplicationContext 에서 getBean 메서드를 이용해 받아올 수 있는 객체를 빈이라고 한다.
// new 로 생성하는 경우 빈이 아니다
---------------------------------------
import org.springframework.beans.factory.annotation.Autowired;
// type (인터페이스) 기준 매칭 - 여러개의 클래스가 존재하는 경우 빈 태그의 id로 구분
// 유니크하게 식별이 불가능할 경우 에러
@Autowired
Tire tire; //스프링 프레임워크가 설정 파일을 통해 대신 주입해준다.
--------------------------------------
import javax.annotation.Resuorce;
// 자바 표준 어노테이션
// id 기준 매칭 - id에 맞는 빈이 없는 경우 type으로 찾는다.
@Resource
Tire tire;
AOP (Aspect Oriented Programming)
- 로직(code)에 대한 주입 - 메서드에만 적용 가능
- cross-cutting concern (횡단 관심사) : 다수의 모듈에 공통으로 나타나는 부분
- 코드 주입 가능한 부분 : Around, Before, After, AfterReturning, AfterThrowing
-
인터페이스, 프록시, 런타임 기반
- PointCut : 삽입 지점을 명시
형태
[접근제한자] 리턴타입 [패키지&클래스패턴].메서드이름패턴(파리미터패턴) [throws 예외패턴] - JoinPoint : 호출된 객체의 메서드
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect // MyAspect 클래스를 AOP에서 사용하겠다는 의미
public class MyAspect {
//apo002.Boy.runSomething 실행 전에 해당 메서드를 실행한다.
@Before("execution(public void aop002.Boy.runSomething ())") // excution 내부가 PointCut
public void before(JoinPoint joinPoint) {
System.out.println("...");
}
}
PSA (Portable Service Abstraction)
- 일관성 있는 서비스 추상화
- ORM, … 등등 일관된 방식으로 코드를 작성할 수 있게 해준다
Spring MVC
- 흐름
- 클라이언트에서 URL 입력
- 서블릿 컨테이너가 해당하는 웹 컨텍스트를 찾아준다 (URl 분석)
- 해당 웹 컨텍스트가 스프링 ApplicationContext에 @RequestMapping 핸들링된 메서드에 처리를 위임한다
VO (Value Object) vs DTO (Data Transfer Object)
- 동일한 값의 두 객체를 생성했을 때, VO는 같다고 판단 (객체의 값에의존)하고, DTO는 다르다고 판단 (객체 자체에 의존)한다
JPA (Java Persistence API)
- 관계형 데이터베이를 사용하는 방식을 정의한 인터페이스
Hibernate
- JPA 인터페이스를 실제로 구현한 ORM (객체 관계 매핑 프레임워크)
출처
스프링 입문을 위한 자바 객체지향의 원리와 이해