[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>
반응형