참조글의 4) bean.xml 생성 부분을 참조하면 된다. 파일 네임만 작성 후 finish를 하면 아래 코드와 같은 파일이 완성된다. (네임 스페이스의 체크박스 추가 X)

 

 

<beans> 태그 

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

루트 엘리먼트이다. 스프링 컨테이너는 <bean> 저장소에 해당하는 XML설정 파일을 참조하여 <bean>의 생명주기를 관리하고 여러가지 서비스를 제공한다.
STS를 이용하여 만든 스프링 설정 파일에는 beans 네임스페이스가 기본 네임스페이스로 선언되어 있으며, spring-beans.xsd 스키마 문서가 schemaLocation으로 등록되어있다.
따라서, 사용할 수 있는 자식 엘리먼트는 <bean>, <description>, <alias>, <import> 이다.

 

BeanFactory는 인스턴스를 생성하고 설정하고 많은 수의 bean을 관리하는 실질적인 컨테이너

 

<bean> 태그

<bean id="tv" class="polymorphism.SamsungTV" init-method="initMethod" 
      destroy-method="endMethod" lazy-init="true" scope="singleton"/>

스프링 설정 파일에 클래스를 등록 할때 사용한다.

<beans> 태그 안에 위치해야 한다.

 

<bean> 속성

속성명 속성 정리
id 속성값은 고유한 식별값이여야 한다.(카멜케이스 사용), 컨테이너로부터 <bean> 객체를 요청할 때 사용
name 고유한 식별값이여야하지만, id와 다르게 작성 규칙이 존재하지 않음. (더 명확한 id를 많이 사용한다.)
class 생략할 수 없는 속성이다. 속성값은 연결할 class의 패키지명.클래스명이다(정확하게 등록해야 한다.)
init-method 스프링 컨테이너에서 객체를 생성할 때 기본생성자를 호출한다. 객체 생성후 바로 실행되는 메소드 지정할 수 있다. (Serlvet객체의 멤버변수의 초기화 작업이 필요하다면 사용) 속성명은 연결한 클래스의 메소드 명이다.
 destroy-method 스프링 컨테이너가 객체를 삭제하기 직전에 호출될 임의의 메소드를 지정한다.
lazy-init  스프링에서 컨테이너가 구동되는 시점에 <bean> 객체를 생성한다. (메모리 관리 비효율적)
lazy-init의 속성값을 true로 설정하면  <bean>이 사용되는 시점에서 객체를 생성한다.(메모리 관리에 효율적) 
scope 컨테이너가 생성한 bean을 어느 범위에서 사용할 수 있는지를 지정할 때 사용.
기본값은 singleton(단 하나만 생성되도록 운용)이다.
속성값으로 prototype을 설정하면 매번 새로운 객체가 생성된다.

 

Bean에 연결한 Class 예시

package polymorphism;

public class SamsungTV implements TV{
	public SamsungTV() {
		System.out.println("===>SamsungTV 객체 생성 ");
	}
	
    public void initMethod() {
		System.out.println("객체 초기화 작업 처리...");
	}
	
	public void powerOn() {
		System.out.println("SamsungTV---전원 켠다.");
	}
	
    public void powerOff() {
		System.out.println("SamsungTV---전원 끈다.");
	}
	
    public void volumeUp() {
		System.out.println("SamsungTV---소리 올린다");
	}
	
    public void volumeDown() {
		System.out.println("SamsungTV---소리 내린다");
	}
	
	public void endMethod() {
		System.out.println("객체 삭제전 처리할 로직 처리...");
	}
}

상속받은 인터페이스는 생략....

 

생성한 XML파일을 자바에 연결 하는 방법

package polymorphism;

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

public class TVUser {
	public static void main(String[] args) {
				
		AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
				
		TV tv = (TV)factory.getBean("tv");
		tv.powerOn();
		tv.volumeUp();
		tv.volumeDown();
		tv.powerOff();
		
		factory.close();
	}
}

 

GenericXmlApplicationContext 

파일 시스템이나 클레스 경로에 있는 XML 설정 파일을 로딩하여 구동하는 컨테이너

파라미터에 xml파일의 filename을 작성한다.

 

getBean의 파라미터엔 bean태그의 id속성값을 작성한다.

 

 

실행화면 

INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@75a1cd57: startup date [Sun Jul 18 16:02:46 KST 2021]; root of context hierarchy
===>SamsungTV 객체 생성 
객체 초기화 작업 처리...
SamsungTV---전원 켠다.
SamsungTV---소리 올린다
SamsungTV---소리 내린다
SamsungTV---전원 끈다.
INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@75a1cd57: startup date [Sun Jul 18 16:02:46 KST 2021]; root of context hierarchy
객체 삭제전 처리할 로직 처리...

 

 

 

 

참조 문헌 - 스프링 퀵 스타트

+ Recent posts