1. Spring DI
Spring DI 용어
Bean
- 스프링이 IoC 방식으로 관리하는 오브젝트.
- 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만을 Bean이라고 한다.
BeanFactory
- 스프링이 IoC를 담당하는 핵심 컨테이너.
- Bean을 등록, 생성, 조회, 반환하는 기능을 담당.
- 일반적으로 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용한다.
ApplicationContext
- BealnFactory를 확장한 IoC 컨테이너이다.
- Bean을 등록하고 관리하는 기본적인 기능은 BeanFactory와 동일하다.
- 스프링이 제공하는 각종 부가서비스를 추가로 제공한다.
- BeanFactory라고 부를때는 주로 빈의 생성과 제어의 관점에서 이야기하는 것이고, ApplicationContext라고 할 때는 스프링이 제공하는 Application 지원 기능을 모두 포함하는 것이다.
설정정보 / 설정 메타정보
- 스프링의 설정 정보란 ApplicationContext 또는 BeanFactory가 IoC를 적용하기 위해 사용하는 메타정보를 말한다.
- 설정정보는 IoC 컨테이너에 의해 관리되는 Bean 객체를 생성하고 구성할 때 사용된다.
Spring Framework
- 스프링 프레임워크는 IoC 컨테이너, ApplicationContext를 포함해서 스프링이 제공하는 모든 기능을 통틀어 말할 때 주로 사용한다.
Bean 생성범위
Singleton Bean
- 스프링 빈은 기본적으로 싱글톤으로 만들어 짐.
- 그러므로, 컨테이너가 제공하는 모든 빈의 인스턴스는 항상 동일.
- 컨테이너가 항상 새로운 인스턴스를 반환하게 하고 싶을 경우 Scope를 prototype으로 설정해야 한다.
@Component("memberService")
@Scope("singleton") // @Scope("prototype")
public class MemberServiceImpl implements MemberService{
@Override
public int registerMember(){
return 0;
}
}
스프링 설정 메타 정보를 표현하는 방식
@Component("memberService")
@Scope("singleton") // @Scope("prototype")
public class MemberServiceImpl implements MemberService{
@Override
public int registerMember(){
return 0;
}
}
XML
- 단순하며 사용하기 쉬움, 가장 많이 사용하는 방식.
- 태그를 통해 세밀한 제어 가능.
Annotation
- Application의 규모가 커지고, 빈의 개수가 많아질 경우 XML 파일을 관리하는 것이 번거로움.
- Bean으로 사용될 클래스에 특별한 Annotation을 부여해 주면 자동으로 빈 등록 가능.
- 오브젝트 빈 스캐너로 빈 스캐닝을 통해 자동 등록
(빈 스캐너는 기본적으로 클래스 이름의 첫 글자만 소문자로 바꾼 것을 빈의 ID로 사용.)
Spring Bean 의존 관계 설정.
멤버 변수에 직접 정의하는 경우 Setter 함수를 만들지 않아도 된다.
-
@Resource : 멤버 변수, Setter method에 사용 가능.
타입에 맞춰서 연결. -
@Autowired : Spring에서만 사용 가능.
정밀한 DI가 필요한 경우 유용하다.
타입에 맞춰서 연결. -
@Inject : 프레임워크에 종속적이지 않음.
javax.inject-xxx.jar 가 필요함.
이름으로 연결.
@Service("gbService")
public class GuestBookServiceImpl implements GuestBookService {
@Autowired
// @Qualifier("gbDao") // 동일 타입이 여러개일 경우
private GuestBookDao guestBookDao;
}
Author And Source
이 문제에 관하여(1. Spring DI), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mraz0210/1.-Spring-DI저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)