티스토리 뷰
반응형
IoC의 개념
- Inversion of Control의 약자로서, 객체의 생성과 생명주기에 대한 권한이 역전되는 것을 말한다.
IoC 컨테이너
- 객체의 생성과 생명주기를 관리하고, POJO의 생성과 초기화, 서비스, 소멸에 대한 권하을 가진다.
DI의 개념
- Dependency Injection의 약자로서, Bean 설정 정보를 바탕으로 객체간의 의존 관계를 연결해주는 것을 말한다.
빈 설정 방법
-
xml로 설정
//1. 객체마다 Bean 설정 <bean id = "custService" class ="mesung.springKeyTech.CustService"> <property name="custRepository" ref="custRepository"/> </bean> <bean id = "custRepository" class ="mesung.springKeyTech.CustRepository"></bean> //2. 패키지로 Bean 설저 <context:component-scan base-package="mesung.springKeyTech"/>
-
CustService와 CustRepository를 Bean으로 등록한다.
-
CustService와 CustRepoistory는 서로 의존 관계를 갖는다.
-
mesung.springKeyTech 하위에 있는 모든 객체를 Bean으로 등록한다.
-
-
Java로 설정
//1. 객체마다 Bean 설정 @Configuration //Java Bean 설정 어노테이션 public class ApplicationConfig { /* CustRepository를 Bean으로 설정 CustService와 CustRepository 의존 관계 설정 */ @Bean //CustRepository Bean 설정 public CustRepository custRepository() { return new CustRepository(); } //setter를 활용한 의존성 주입 @Bean public CustService custService() { CustService custService = new CustService(); custService.setCustRepository(custRepository()); return CustService; } //메서드 파라미터를 활용한 의존성 주입 @Bean public CustService custService(CustRepository custRepository) { CustService custService = new CustService(); custService.setCustRepository(custRepository); return CustService; } } //2. DemoApplication이 속한 패키지 하위에 모든 Bean 설정 @Configuration @ComponentScan(basePackageClasses = DemoApplication.class) public class ApplicationConfig {}
- 각 메소드의 반환값을 통해 Bean을 등록하며, 등록된 Bean(CustRepository)를 불러와 CustService와 의존관계를 맺는다.
- DemoApplication.java가 속한 패키지의 모든 객체는 Bean으로 등록된다.
-
SpringBoot로 설정
//DemoApplication.java @SpringBootApplication public class DemoApplication { }
@SpringBootApplication 하나로 DemoApplication이 속한 패키지 하위의 모든 객체는 Bean으로 등록된다.
빈 가져오기(ApplicationContext 활용)
public static void main(String[] args) {
//해당 클래스(ApplicationConfig)를 빈 설정 파일로 사용한다.
ApplicationContext context = new AnnotationConfigApplicationContext(ApplicatoinConfig.class);
String [] beanDefinitionNames = context.getBeanDefinitionNames();
System.out.println(Arrays.toString(beanDefinitionNames));
//Bean 단일적으로 가져오기
CustService custService = (CustService) context.getBean("custService");
}
Spring DI 컨테이너의 개념
BeanFactory로서, Bean(POJO 객체)들을 관리한다.
BeanFactory : Bean을 생성, 조회, 반환에 대해서 관리하고, getBean()이라는 메소드가 정의되어 있다.
ApplicationContext : BeanFactory에 스프링에 관련된 여러 부가 서비스 기능을 추가한 것이고, BeanFactory를 구현하는 구현체이다.
반응형
'Spring > Spring 기초' 카테고리의 다른 글
[토비 스프링] 싱글톤 레지스트리와 오브젝트 스코프 (0) | 2020.03.17 |
---|---|
[토비 스프링] 스프링의 IoC (0) | 2020.03.10 |
[토비 스프링] 제어의 역전 (0) | 2020.03.10 |
[토비 스프링] 사용자 DAO (0) | 2020.03.09 |
[스프링 기초] Bean 등록 및 의존관계 설정 (0) | 2020.02.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- try catch finally
- try with resources
- 연관관계
- 김영한
- jdk버전
- 이펙티브 자바
- flatMap
- java8
- package-private
- java
- springboot
- 빈 순환 참조
- 점층적 생성 패턴
- 이펙티브자바
- 정적팩터리메서드
- JPA
- ifPresent
- mustache
- 자바8
- 스프링부트
- Spring
- 생성자
- 복사 팩토리
- @Lazy
- junit
- Effective Java
- 인프런
- 빌더 패턴
- effectivejava
- 팩토리 메소드 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함