본문 바로가기
Spring & Spring Boot

DI_12_component

by minNa2 2023. 7. 6.

LgTV.java

package org.joonzis.DI_12_component;

import org.springframework.stereotype.Component;

/*
 *	@Component 와 @Configuration/@Bean 은 기능이 비슷
 *	@Component 는 클래스 단위
 *	@Bean 은 메소드 단위 
 */

/*
 * 	java => @Component("tv")
 * 	xml => <bean id="tv" class="org.joonzis.DI_12_component.LgTV" />
 */

@Component("tv")
public class LgTV implements TV{
	public LgTV() {
		System.out.println("--> LgTV 객체 생성");
	}
	
	@Override
	public void powerOn() {
		System.out.println("--> LgTV 전원 켠다");
	}
	
	@Override
	public void powerOff() {
		System.out.println("--> LgTV 전원 끈다");
	}
	
	@Override
	public void volumeUp() {
		System.out.println("--> LgTV 소리 올린다");
	}
	
	@Override
	public void volumeDown() {
		System.out.println("--> LgTV 소리 내린다");
	}
}

TV.java

package org.joonzis.DI_12_component;

public interface TV {
	public void powerOn();
	public void powerOff();
	public void volumeUp();
	public void volumeDown();
}

TVUser.java

package org.joonzis.DI_12_component;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class TVUser {
	public static void main(String[] args) {
		
		// 1. Spring 컨테이너 구동
		AbstractApplicationContext ctx = 
				new GenericXmlApplicationContext("applicationContext12.xml");
		
		TV tv = (TV)ctx.getBean("tv");	// "tv" : 컴포넌트 이름
		tv.powerOn();
		tv.volumeUp();
		tv.volumeDown();
		tv.powerOff();
		
		ctx.close();
	}
}

applicationContext12.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-3.1.xsd">
	
	<!-- 
		컴포넌트 스캔(conponent-scan) 설정
		사용할 객체들을<bean> 등록하지 않고, 자동으로 생성하기 위해 사용
		@Component가 설정된 클래스들을 자동으로 객체 생성한다.
		
		* base-package : 해당 패키지로 시작하는 모든 패지키를 스캔 대상에 포함
		-> org.joonzis.*
		<context:component-scan base-package="org.joonzis"/>
		
		아래 선언한 태그는 클래스의 충돌을 막기위해 해당 패키지 한정으로 처리
	 -->
	 
	 <!-- 패지키 충돌을 막기 위함 -->
	 <context:component-scan base-package="org.joonzis.DI_12_component"></context:component-scan>
	
</beans>
반응형

'Spring & Spring Boot' 카테고리의 다른 글

[Spring] 어노테이션 정리  (1) 2025.02.16
[STS] Eclipse STS lombok.jar 추가  (0) 2023.07.16
DI_11_annoConfig  (0) 2023.07.06
DI_10_annoConfig  (1) 2023.07.06
DI_9_collection  (0) 2023.07.06