- Spring Bean Configuration File 생성 참조 글 : https://chlee21.tistory.com/167
참조글의 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
객체 삭제전 처리할 로직 처리...
참조 문헌 - 스프링 퀵 스타트
'IT > Spring' 카테고리의 다른 글
[Spring] @PathVariable 과 @RequestParam 이란? (0) | 2021.11.30 |
---|---|
[Spring Boot + Security] SecurityConfig 설정 (Feat. gradle) (1) | 2021.11.30 |
[Spring] 의존성 관리방법(Dependency Injection- Setter Injection/Constructor Injection) (0) | 2021.07.18 |
[Spring] AOP (Log 사용예시) (0) | 2021.07.14 |
[Spring] Dynamic Web Project로 스프링 프로젝트 생성하기 (2) | 2021.07.05 |