스프링 빈이란?

스프링이 객체를 생성해 들고 있는다.

즉, 스프링 컨테이너가 생성될 때 컨트롤러(빈)가 같이 생성된다.

 

why?

객체를 계속 생성할 필요가 없고 미리 생성해 그것을 사용한다.

 

빈과 의존관계

 

컨트롤러(@Controller) -> 서비스

컨트롤러로 요청이 들어오면 서비스를 통해 비즈니스 작업을 해야 하기에 컨트롤러가 서비스에 의존한다.

 

의존관계 주입방법

컨트롤러, 서비스를 다 빈으로 등록해준다.

의존관계를 생성할 땐 @Autowired를 사용한다.

 

빈등 록 방식

1. 컴포넌트 스캔

2. 자바 코드로 스프링 빈 등록

 

빈 등록은 메인 메서드가 있는 패키지부터 시작한다.

즉, 하위 패키지에 있는 것만 등록된다.


자바 코드로 빈 등록하기

 

@Configuration

public class SpringConfig {



    @Bean

    public MemberService memberService() {

        return new MemberService(memberRepository());

    }



    @Bean

    public MemberRepository memberRepository(){

        return new MemoryMemberRepository();

    }

}

애노테이션으로 등록하기

@Aspect
@Component
public class TimeTraceAop {

    @Around("execution(* hello.hellospring..*(..))")
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start =  System.currentTimeMillis();
        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println(joinPoint.toString()+" / timeMs : "+timeMs+"ms");
        }

    }
}

@Component,@Service,@Repository 대신 자바로 등록할 수 있다.

정형화된 코드(@Service,@Repository)는 컴포넌트 스캔을 사용한다.

 

또, 생성자로 빈을 생성하는 게 제일 안전하다.

    private final MemberRepository memberRepository;
	
    //생성자
    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

IoC,DI란?


Ioc

DI

Spring Di 컨테이너


IoC(제어의 역전)란?

- 제어권이 바뀐다.(사용자가아님 프레임워크가 제어권을가진다.(컨테이너))

- 개발자가 객체직접생성하지않는다.(컨테이너가 생성된다.)


IoC 의존관계를 결정,설정,생명주기를 해결하기위한 디자인패턴


IoC가아닌경우

-사용자가 New로 생성한다.

ex)


IoC이면

-new 생성직접안한다.

ex)


IoC컨테이너(제어권 가지고있음)

-객체 생성 생명주기 관리한다.

-의존성관리.

-POJO의 생성,초기화,서비스,소멸에 대한 권한을 가진다.


IOC분류

DL

DI


DL 의존성 검색(특정 컨테이너에 종속되는API사용)

- 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup하는것이다.

- 컨테이너가 제공하는 API를사용하기때문에 컨테이너에 종속성이 늘어난다.

- EJB

- Spring

DI 의존성 주입(주로 많이사용)

-각 클래스간의 의존관례를 빈설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는것이다.

-spring

-PicoContainer

-SetterInjection(셋터통해 주입)

-Constructor(생성자통해 주입)

-Method(자바메서드통해주입)



DI개념(의존관계주입)

-의존관계 빈설정(사용자가 설정해줌) 어노테이션등등이 있다.

-컨테이너가 정보들을읽고 자동으로 설정해준다.

개발자의 역할

-의존관계 설정해준다. (어노테이션)

ex)



컨테이너가 흐름의 주체가 된다.(사용자가 설정해준것을 컨테이너가 연결한다.)


장점

-코드가 단순해진다.

-컴포넌트 간의 결합도가 제거된다.

ex)컨트롤러에서 서비스호출 New로 하지않는다.


3가지 유형

-SetterInjection (셋터통해 주입)

-Constructor (생성자통해 주입)

-Methodinjection (자바메서드통해주입)


클래스 호출방식

클래스->인터페이스->구현클래스

연결은 호출이 아닌 XML(설정파일)읽어와 의존성을 삽입해준다.

SetterInjection(한번에 한개씩) 

beans.xml

Hello.java


Constructor Injection(생성자생성)

beans.xml


Hello.java



Spring DI 컨테이너

- Spring DI컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 

빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory)라고 부른다.

- SpringAPI에서 BeanFactory 인터페이스제공한다.

- BeanFactory에 여러가지 컨테이너 기능을 추가하여 애플케이션 컨텍스라고부른다.


BeanFactory 

- Bean을 등록,생성 조회,반환 관리한다.

- 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용한다.

- getBean() 메서드가 정의되어있다.

ApplicationContext  <-DI컨테이너 역할을한다.

- Bean을 등록,생성,조회,반환 관리하는 기능은 BeanFactory와 같다.

- Spring의 각종 부가 서비스를 추가로 제공한다.

- Spring이 제공하는 ApplicationContext 구현 클래스가 여러가지 종류가있다.



'개발 소발 > 개발 Spring' 카테고리의 다른 글

Bean등록 및 메타정보구성이란?  (0) 2017.11.21
bean,properties설정이란?  (0) 2017.11.20
Junit,Spring-Test란?(의존성예제)  (0) 2017.11.20
STS,maven이란?  (0) 2017.11.20
Spring프레임워크란?  (0) 2017.11.20

Spring프레임워크란?


스프링 프레임워크의 정의와 전략

스프링 프레임워크의 특징

스프링 페리임워크의 기능요소


스프링프레임워크란?

Java 엔터프라이즈 개발을 편하게 해주는 오픈소스이다.(경량급 애플리케이션 프레임워크)

엔터프라이즈 개발(뒷단을 제공 비지니스로직개발에 전념)보안,인증등을 제공한다.

스프링프레임워크의 전략

삼각형이다.(Portable Service Abstraction,Aop,Di)

Portable Service Abstract(서비스 추상화)

- 트랜잭션 추상화,Object Xml MAppting,데이터 액세스의 Exception을 제공한다.

- 개발자는 기술사용하는 인터페이스만 사용한다.


Di(의존관계주입)

객체지향 개발 충실하기위한 설계가 가능하도록 한다.

확장가능한 객체이다.(인터페이스만들고 구현클래스를 생성하게한다.)


AOP(관점지향프로그래밍)

기술 관련 코드를 분리에서 사용하게한다.


POJO

일반적인 자바 오브젝트이다.(HttpServlet는 웹컨테이너가잇어야해서 아님)

특정환경이나 규약에 종속되지않고 JRE만잇으면 사용가능한다.


스프링 프레임워크의 특징

컨테이너 역할

자바객체의 라이프사이클을 관리 ,스프링 컨테이너로부터 필요한 객체를 가져와사용한다.

DI지원

Spring 설정파일(XML) 이나 어노테이션 @ex 통해서 객체간의 의존관게를 설정한다.

AOP지원(관점지향)

핵심모듈(업무로직)에서 공통적인 로직(로그)을 분리에서 적용한다.

POJO지원

어떠한 규약에 종속되지않는 자바객체개발가능하다.

트랜잭션 처리를 위한 일관된 방법을 지원

DB(COMMIT,ROLLBACK)등을 코드가 아닌 설정(XML,@어노테이션)으로 설정해서 모두 동일한 코드사용가능하다.

영속성 관 관련된 다양한 API 지원

Mybatis,Hibernate 등 DB처리위한 ORM프레임워크들과 연동지원한다.



스프링 프레임워크의 기능요소

7가지

 Spring Core

 스프링프레임워크에 기본기능제공(bean) *컨테이너기능

BeanFactory 지원

 Spring Aop

 업무로직과 공통로직을 분리

 Aspect 지향프로그래밍

 Spring Orm

 db 프레임워크와 연동가능하게함 

 Spring DAO

 jdbc코딩과 예외처리 간편화시킴 AoP 트랜잭션 관리 서비스 제공

 Spring Web

 웹애플리케이션 개발에 필요한 기본기능 제공

 다른 웹프레임워크와 연동

 Spring Context

 core부분을 확장

 국제화,이벤트,유효성검증등

 Spring WebMvc

 애플리케이션 로직과 웹애플리케이션을 분리에서 개발하게함


'개발 소발 > 개발 Spring' 카테고리의 다른 글

Bean등록 및 메타정보구성이란?  (0) 2017.11.21
bean,properties설정이란?  (0) 2017.11.20
Junit,Spring-Test란?(의존성예제)  (0) 2017.11.20
IoC,DI란?  (0) 2017.11.20
STS,maven이란?  (0) 2017.11.20

+ Recent posts