반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

bro's coding

spring.ioc.기초 본문

[IT]/Spring

spring.ioc.기초

givemebro 2021. 5. 18. 12:18
반응형

 * IoC방식 제어 IoC Container(ClassPathXmlApplicationContext)를 이용해 스프링 설정 파일
 * (ioc.xml)을 시슷템 시작시에 로딩해서 필요한 객체를 생성한 후 어플리케이션 상에서 필요시 해당 객체(bean)를 요청
 * 하면 IoC 컨테이너가 해당 객체를 반환해준다
 * 
 * spring IOC Container는 Singleton 방식으로 객체를 운용한다 (singleton design pattern: 시스템
 * 상에서 단 하난의 객체만 생성해서 사용하고자 할 때 >서버의 자원을 절약)
 * 
 * 기존 제어방식 : 직접 소스코드상에서 객체 생성부 코드를 변경
 * IOC 제어방식 : 설정정보(ioc.xml)를 변경하여 Spring IOC 컨테이너에 알리고
 *  코드상에서는 수정이 없다

* IOC는 singleton design pattern이다.
(시스템 상에서 단 한번 객체를 생성해서 여러 곳에서 공유해 사용)
* Spring IOC, DI, DL은 bean(객체)을 singleton 방식으로 운용(default)

package model;

public interface Tool {
	public void work();
}
package model;

public class Hammer implements Tool {
	public void work() {
		System.out.println("망치 도구로 일하다");
	}
}
package model;

public class Spade implements Tool {

	public void work() {
		System.out.println("삽 도구로 일하다");
	}

}
package test;



import org.springframework.context.support.ClassPathXmlApplicationContext;

import model.Tool;


public class TestIOCUser {
	/**
	 * 기존 제어방식 사용자가 망치를 사용하기 위해 Hammer 객체를 생성해서 work 메서드를 호출 만약 망치에서 삽으로 도구를 변경해 한다면
	 * new Hammer() 즉 객체 생성하는 부분은 변경이 불가피하다(코드 수정 필요)
	 * 
	 * 도구(컴포넌트)의 변경이 필요할 때 마다 직접 코드를 수정해야 하므로 도구와 사용자의 관계사엥서 결합도가 높아 유지보수성이 낮다고 볼 수
	 * 있다
	 * 
	 * --> Spring IOC를 적용, 결합도를 느슨하게 or 낮게 만들어 유지보수성을 향상시켜 본다
	 * 
	 * @param args
	 */

	/**
	 * IoC방식 제어 IoC Container(ClassPathXmlApplicationContext)를 이용해 스프링 설정 파일
	 * (ioc.xml)을 시슷템 시작시에 로딩해서 필요한 객체를 생성한 후 어플리케이션 상에서 필요시 해당 객체(bean)를 요청하면 Ioc\C
	 * 컨테이너가 해당 객체를 반환해준다
	 * 
	 * spring IOC Container는 Singleton 방식으로 객체를 운용한다 (singleton design pattern: 시스템
	 * 상에서 단 하난의 객체만 생성해서 사용하고자 할 때 >서버의 자원을 절약)
	 * 
	 * 기존 제어방식	: 직접 소스코드상에서 객체 생성부 코드를 변경
	 * IOC 제어방식		: 설정정보(ioc.xml)를 변경하여 Spring IOC 컨테이너에 알리고
	 * 						코드상에서는 수정이 없다
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
////		Hammer tool = new Hammer();
//		Spade tool = new Spade();
//		tool.work();
		ClassPathXmlApplicationContext factory = new ClassPathXmlApplicationContext("ioc.xml");
		System.out.println(factory.getBean("tool"));
		System.out.println(factory.getBean("tool"));
		System.out.println(factory.getBean("tool"));
		// 위에서 반환받은 객체의 주소값은 동일하다
		// spring IOC Container는 Singleton 방식으로 객체를 운용한다
		Tool tool = (Tool) factory.getBean("tool");
		tool.work();
		factory.close();
	}
}
<?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">

<bean id="tool" class="model.Spade"></bean>

</beans>

반응형

'[IT] > Spring' 카테고리의 다른 글

Spring.AOP.around  (0) 2021.05.25
log4j  (0) 2021.05.24
Spring.AOP(Aspect Oriented Programming)  (0) 2021.05.21
Spring.IOC.판서  (0) 2021.05.21
spring.Maven  (0) 2021.05.20
spring.ioc.기존방식  (0) 2021.05.18
Spring.IoC/DI/DL  (0) 2021.05.17
Spring.Framework.개념용어정리  (0) 2021.05.17
Comments