Spring Component day 59

stan·2023년 8월 9일
0

Spring

목록 보기
8/22

<context:component-scan base-package="test"/>
context라는 네임스페이스에서
component-scan이라는 기능의 엘리먼트(태그)를 꺼내어사용중
component == Bean == 모듈 == 위젯

"test"라는 이름의 패키지를 스캔해줘!~~
패키지 안에 있는 파일들 보면서 어노테이션을 일일이 확인후 메모리 로딩

GalaxyPhone gp = new GalaxyPhone();

 == <bean class = "test.GalaxyPhone" id = "gp"/>

== @Component("gp")

1) @Component
-> NPE (null pointer exception) 의존 주입 자체를 안함
=> 의존관계를 가진 watch가 DI되지 않아기때문에 오류발생

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

	<context:component-scan base-package="test" />
	<bean class="test.GalaxyWatch" id="watch" />
	
	<context:component-scan base-package="day59"/>
	<bean class = "day59.RemoteA" id="a"/>
	
	<bean class="day59.LgTV" id = "tv">
		<property name ="remote" ref="b"/>
	</bean>

SamsungTV.java

  package day59;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("sTV")
public class SamsungTV implements TV {

	@Autowired
	private Remote remote;
	// 1. 의존관계 발생
	// 2. 의존 주입(DI)
	//  1) 생성자 주입
	//  2) setter 주입
	// 3. 설정(.xml)
	//  : POJO -> 스프링 컨테이너한테 설정을 해야하므로 applicationContext.xml
	//  만약에 not POJO(서블릿)였다면 서블릿 컨테이너(톰캣)한테 설정을 해야하므로 web.xml
	
	public SamsungTV() {
		System.out.println("삼성TV 기본생성자");
	}
	public SamsungTV(Remote remote) { // 생성자 DI(2-1)을 위한 생성자를 오버로딩
		this.remote=remote;
		System.out.println("삼성TV 생성자");
	}
	
	@Override
	public void funcA() {
		remote.funcA();
		System.out.println("SamsungTV 전원 ON/OFF");
	}

	@Override
	public void funcB() {
		remote.funcB();
		System.out.println("SamsungTV 채널변경");
	}

}
profile
이진 입니다

0개의 댓글