스프링 ch3-1 ~ ch3-4

서현우·2022년 7월 5일
0

스프링의정석

목록 보기
70/85

ch3-1 ~ ch3-4

  • Spring DI(의존성 주입) 흉내내기 1 ~ 3, 실습
  • @Component - component-scan으로 bean으로 등록
  • @Autowired, @Resource - bean으로 등록한 것을 주입
  • config.xml - bean 등록, bean으로 초기화(setter, 생성자 이용)

Spring DI 흉내내기

1. 변경에 유리한 코드

  • 다형성, factory method pattern
  • Map과 외부 파일(config.txt)

2. 객체 컨테이너(ApplicationContext) 만들기

  • 객체 컨테이너 - 객체 저장소

3. @Component - 자동 객체 등록하기

  • @Component가 붙은 클래스를 찾아서, 첫글자를 소문자를 key로 map에 저장.
  • 즉 다른 객체에 주입 보낼 객체 앞에 @Component를 붙인다.
  • xml문서에 conponent-scan태그를 등록해서,
    @Component가 붙은 클래스를 자동으로 bean으로 등록 할 수 있다.

4. 객체 찾기

  • by Name, by Type

5. @Autowired - 객체를 자동 연결 하기(1)

  • by Type.
  • 타입으로 주입 받을 객체 앞에 @Autowired를 붙이면, bean을 검색해서 주입받는다.
  • map의 value(타입)를 instanceof로 찾는다.
  • 타입으로 검색 시 여러개가 있을 때는 타입의 첫글자를 소문자로해서, 이름으로 검색한다.
  • @Qualifier를 추가 할 수도 있다.

6. @Resource - 객체를 자동 연결 하기(2)

  • by Name
  • 이름으로 주입 받을 객체 앞에 @Resource를 붙이면, bean을 검색해서 주입받는다.
  • map의 key(이름)를 찾는다.
  • 찾을 이름을 적을 수 있고, 이름을 생략하면 타입의 첫글자를 소문자로 찾는다.

config1.xml

  • /src/main/resources/config1.xml
  • 클래스에 setter나 constructor를 만들고, 이를 이용해 bean으로 등록해서 초기화 할 수 있다.
  1. Car클래스의 setter를 이용해서 초기화
<!-- Car클래스의 setter를 이용해서 초기화 -->
<bean id="car" class="com.fastcampus.ch3.Car">
	<property name="color" value="red"/>
	<property name="oil" value="100"/>
	<property name="engine" ref="engine"/>
	<property name="doors">
		<array value-type="com.fastcampus.ch3.Door">
			<ref bean="door"/>
			<ref bean="door"/>
		</array>
	</property>
</bean>
<bean id="engine" class="com.fastcampus.ch3.Engine" scope="singleton"/>
<bean id="door" class="com.fastcampus.ch3.Door" scope="prototype"/>
  1. Car클래스의 생성자를 이용해서 초기화
<!-- Car클래스의 생성자를 이용해서 초기화 -->
<bean id="car" class="com.fastcampus.ch3.Car">
	<constructor-arg name="color" value="red"/>
	<constructor-arg name="oil" value="100"/>
	<constructor-arg name="engine" ref="engine"/>
	<constructor-arg name="doors">
		<array value-type="com.fastcampus.ch3.Door">
			<ref bean="door"/>
			<ref bean="door"/>
		</array>
	</constructor-arg>
</bean>
<bean id="engine" class="com.fastcampus.ch3.Engine" scope="singleton"/>
<bean id="door" class="com.fastcampus.ch3.Door" scope="prototype"/>

config.xml

component-scan태그를 등록. 정규식을 추가했음.

<context:component-scan base-package="com.fastcampus.ch3">
	<context:exclude-filter type="regex" expression="com.fastcampus.ch3.diCopy*.*"/>
</context:component-scan>
profile
안녕하세요!!

0개의 댓글