본문 바로가기

스프링

스프링의 특징 2 [DI, IoC] Spring Bean

반응형

스프링 특징 [DI, IoC] 요약

 

우선적으로 스프링 특징들 중에는 DI 와 IoC 가 있습니다.

의존성 주입(DI)을 통해 IoC 컨테이너가 객체(Bean)의 생성부터 생명주기 관리까지 제어를 하여

제어권이 역전되었음을 IoC 라고 합니다.

 

DI는 IoC 개념이 적용된 결과물 중 하나입니다.

이전글 : https://yuni-spring.tistory.com/3?category=964749

Spring Bean

Spring 에서 말하는 Bean을 Spring Bean

스프링 프레임워크의 IoC 컨테이너에 의해 등록, 생성, 조회, 관계 설정이 되는 객체

 

일반 Java Object와 동일하나 IoC 방식으로 관리되는 오브젝트

 

Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다.
우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니다.
ApplicationContext.getBean()으로 얻어질 수 있는 객체를 빈이라고 한다.
Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미

 


Java Bean

데이터를 표현하는 것을 목적으로 하는 자바 클래스

뷰 영역에 데이터를 출력하고 싶을 때,

Java Bean 규약에 맞춰 만들어진 객체를 사용하고 외부 저장소에 저장, 전송 시 사용

 

/** 1. import java.io.Serializable */
public class User implements java.io.Serializable {
    /** 2. private fields */
    private int id;
    private String name;

    /** 3. Constructor */
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    /** 4. getter/setter */
    // getter
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    // setter
    public void setId(int id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
}

 

JSP 페이지에는 HTML코드와 쉽고 간단한 자바코드만. 어려운 코드를 분리.

여러 응용 프로그램에서 재사용 가능

 

 

결론적으로

Spring Bean 이라는 것은 Spring Ioc 컨테이너에 의해 관리되는 객체

IoC 컨테이너에서 관리한다는 의미는 객체를 생성하고, 생명주기(life Cycle)를 수행하고, 의존성 주입(Dependency Injection) 한다는 것을 말한다.

 

java bean은 jsp에서 주로 사용되는 것으로 자바 코드로 작성된 class이며, 주로 데이터 전달을 위해 사용된다.

 


Spring Bean 구성방법

 

1. XML 등록

 

빈 설정파일은 XML과 자바 설정파일로 작성할 수 있음

최근 추세는 자바 설정파일을 좀 더 많이 사용한다고 함

 

 

2. 자바 설정 

 

Container에 Spring Bean으로 등록 시켜주는 어노테이션 으로는

@Component 와 @Bean이 있다.

 

@Component
개발자가 직접 컨트롤 할 수 있는 (직접 만든) 클래스를 Bean으로 등록하고 싶을 때
선언된 class를 Bean으로 등록

@Component 어노테이션이 붙어있으면 스프링 빈에 자동 등록된다.

@Service, @Repository, @Controller는 @Component를 가지고 있는 어노테이션들

그래서 스프링 빈에 자동 등록된다.

 

@Controller, @Service, @Repository 등은 @Component를 비지니스 레이어에 따라 명칭을 달리 지정해준 것

 

@Controller //자동으로 객체(Bean) 등록
public class HomeController {

@Autowired //타입으로 참조할 Bean을 검색하여 주입
private HomeService service;

@GetMapping("/")
	public String home(Model model, Home home) {
    
    List<Home> list = service.boardList(home);
        model.addAttribute("list", list);
        return "home";
        }
 }

 

3. 자바 설정 파일

Java Configuration을 통하여 Spring Bean 등록

스프링 빈에 자동 등록 되는 @Service 삭제 후 BeanConfiguration 클래스 생성

 

@Configuration
public class BeanConfiguration {
	 @Bean
     public HomeService homeService() {
		 return new HomeService(homeMapper());
	 }

	private HomeMapper homeMapper() {
		// TODO Auto-generated method stub
		return null;
	}
}


//@Service 주석문 처리

public class HomeService {

	@Autowired 
	private HomeMapper homeMapper; //homeMapper의 타입으로 참조할 bean을 찾아 주입한다
	
	public HomeService(HomeMapper homeMapper) {
		
	}

	public String home() {
		return homeMapper.home();
	}
	// 테스트

	 public List<Home> boardList(Home home) {
		return homeMapper.boardList();
	}

 

 

@Configuration
스프링 IoC컨테이너에게 해당 클래스를 Bean 구성 class임을 알려준다.

@Bean
개발자가 컨트롤 할 수 없는 외부 라이브러리 Bean으로 등록할 경우
메서드로 return되는 객체를 Bean으로 등록한다.

@Autowired
각 상황의 타입에 맞는 IoC 컨테이너 안에 존재하는 Bean을 자동으로 주입한다.

 

 

 


스프링에서 왜 Bean을 쓸까?

 

1. 자주 사용하는 객체를 Singletone으로 만든 후 어디서든 불러서 사용가능하게 하여 효율 증가

 

Singletone
오직 인스턴스가 1개만 생성되어야 할 때 사용되는 패턴
하나의 인스턴스를 메모리 등록, 여러 스레드가 동시 공유, 사용
> 효율을 높일 수 있음

 

2. new를 사용하여 객체를 생성하지 않고 Spring IOC에 미리 생성된 빈을 가져다 쓰는 방식을 통해 의존성 관리

 

3. 객체의 라이프사이클을 관리하기 용이함 (인터페이스를 지원)

postconstruct 어노테이션 등 객체가 생성,소멸 될때의 동작을 추가하거나 미리 생성되기 이전에 Field를 검사할 수 있음


요약 

 

 

의존성 주입(DI)을 통해 IoC 컨테이너가 객체(Bean)의 생성부터 생명주기 관리까지 제어를 하여

제어권이 역전되었음을 IoC 라고 합니다.

 

Spring 에서의 Bean 을 Spring Bean이라고 하며 객체를 생성하는 방법으로는

XML과 어노테이션을 통한 Java 설정, Java Configuration 설정 등이 있으며,

Java Bean 과 Spring Bean의 차이점, 사용이유에 대해서 확인했습니다.

 

 

 

 

 

 

 

반응형

'스프링' 카테고리의 다른 글

스프링의 특징 5 [Annotation] Java Configuration  (0) 2021.09.09
스프링의 특징 4 [PSA]  (0) 2021.09.09
스프링의 특징 3 [AOP]  (0) 2021.09.08
스프링의 특징 1 [DI, IoC]  (0) 2021.09.08
Spring Framework [개념]  (0) 2021.09.08