hrming

Spring DI 본문

Spring

Spring DI

hrming 2022. 5. 31. 14:20

Bean

: Spring Container가 관리하는 객체
(XML문서를 만들고 그 안에 빈 태그를 사용해서 빈을 정의하면, Spring Container가 이를 읽어들여서 빈에 정의된 클래스 객체를 만듦)

: 자바의 객체,  Spring container에 의해 자바 객체가 만들어 지게 되면서 이 객체를 스프링 빈이라고 부르게 된것이지만 스프링 빈과 일반 객체와의 차이점은 별다르게 없음. Spring container  에서 만들어지는 객체를 스프링 빈이라고 부를 뿐이다.


Spring Bean을 사용하는 이유

자주 사용하는 객체를 singleton으로 만들어 놓고 어디서든 불러쓸 수 있도록 하기 위함.

의존성 주입은 간단히 말해 모듈간의 결합도를 낮추어 클래스를 수정해야하는 상황을 줄여주며 이 과정에서 Spring bean의 활용도가 높아진다.

 

의존성 주입이 되지 않은 모델은 클래스를 변경해야 하는 상황일때 직접 다른 연관 클래스를 수정해야 하지만

의존성 주입 DI를 사용한다면 개발자는 아래 두가지 과정을 통해 코드를 수정할 수 있다.

    1.Bean class를 작성

    2.주입을 위한 xml 설정(spring container 에서는 @어노테이션 기술 사용)


Spring Container

: Bean 저장소, Bean을 저장, 관리 (생성, 소멸, 연결)
  1. BeanFactory - Bean을 생성, 연결등의 기본 기능을 정의
  2. ApplicationContext - BeanFactory를 확장해서 여러 기능을 추가 정의
  (Spring Container와 거의 같은 개념이라고 생각하면 됨. 스프링으로 애플리케이션개발할때 작성한 프로젝트 모듈 전체 환경을 관리하는 것이 ApplicationContext이고 그 중 일부가 Spring Container) 


*  ApplicationContext의 종류

종류 XML Java Config
non-Web GenericXmlApplicationContext AnnotationConfigApplicationContext
Web XmlWebApplicationContext AnnotationConfigWebApplicationContext


빈을 찾을 때, ServletWebApplicationContext(자식)에서 먼저 찾아보고 없으면, RootWebApplicationContext(부모)에서 추가로 찾음. 

RootWebApplicationContext에는 웹하고 관련이 적은 DB와 관련된 빈을 등록하고, 

ServletWebApplicationContext에는 각 모듈에서 사용하는 개별적인 빈들을 등록해서 구분.

 


스프링 애너테이션 & 표준 애너테이션 (JSR-330)

javax.inject-1.jar - @Inject, @Named, @Qualifier, @Scope, @Singleton

annotations-api-jar - @Resource, @ManagedBean, @PreDestroy, @PostContruct

스프링 애너테이션 표준 애너테이션 비고
@Autowired @Inject @Inject에는 required 속성이 없음
@Qualifier @Qualifier, @Named 스프링의 @Qaulifier는 @Named 와 유사
- @Resource 스프링에는 이름 검색이 없음
@Scope("singleton") @Singleton 표준에서는 prototype이 디폴트
@Component @Named, @ManagedBean 표준에서는 반드시 이름이 있어야 함

 

출처1: 스프링의 정석

출차2: https://dkkim2318.tistory.com/36

 

코드로 익혀보는 Spring 기초1(의존성 주입과 Bean 객체)

Bean  간단하게 한줄로 요약하자면 자바의 객체입니다. spring container에 의해 자바 객체가 만들어 지게 되면서 이 객체를 스프링 빈이라고 부르게 된것이지만 스프링 빈과 일반 객체와의 차이점은

dkkim2318.tistory.com

 

 

'Spring' 카테고리의 다른 글

[Spring] @Component  (0) 2024.03.04
VO(Value Object)  (0) 2022.08.18
AOP(Aspect Oriented Programming)  (1) 2022.05.30
JAVA REFLECTION API  (0) 2022.05.08
1. Spring MVC 패턴  (0) 2022.05.03
Comments