🍃Spring🍃

Spring-B-컨테이너 및 설정 파일

들눈 2023. 9. 19. 09:32

Frame work.

IoC 컨테이너.

Coupling. + Polymorphism

Design Pattern. Factory Pattern, BeanFactory Class.

TV.java
package polymorphism;

public interface TV {
  public void powerOn();
  public void powerOff();
  public void soundUp();
  public void soundDown();
}
samsungTV.java
package polymorphism;

public clss samsungTV implements TV {
  public void powerOn() {
    System.out.println("Samsung 전원을 컨다.");
  }
  public void powerOff() {
    System.out.println("전원을 끈다");....
... //soundUP()
... //soundDown()
  }
}
lgTV.java
package polymorphism;

public clss lgTV implements TV {
  public void powerOn() {
    System.out.println("LGTV -- 전원을 켠다.");
  }
...위 메소드 선언.
...
}
TVUser.java
package polymorphism;

public class TVUser {
  public static void main(String[] args) {
    TV tv = new SamsungTV();
    tv.powerOn();
    ....//위 메소드들 추가.
  }
}

이는 TVUser에 LG나 Samsung을 선언해줘야만 메소드를 실행할 수 있다.

BeanFactory.java
package polymorphism;

public clss BeanFactory {
  public Object getBean(String beanName) {
    if(beanName.equals("samsung")){
      return new SamsungTV();
    } else if (beanName.equals("lg")) {
      return new LgTV();
    }
    return null;
  }
}
TVUser.java
package polymorphism;

public class TVUser {
  public static void main(String[] args) {
    BeanFactory factory = new BeanFactory();
    TV tv = (TV)factory.getBean(args[0]);
    tv.powerOn();
    ...
  }
}

Run As 에서 Run Configurations로 Arguments탭에서 lg, samsung입력하고 Run 버튼을 클릭해서 실행. 명령행 매개변수 전달하기. 끝내 명령형 매개변수만 수정해 실행하면된다.


Spring Beans, Spring Container Sequences.

SamsungTV.java
package polymorphism;

public class samsungTV implements TV {
  public SamsungTV() {
    System.out.println("samsungTV -- 전원을 켠다.");
  }
...
}
applicationContext.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"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean class="polymorphism.SamsungTV"></bean>
</beans>
TVUser.java
package polymorphism;

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

public class TVUser {
  public static void main(String[] args) {
    AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
  }
}//samsungTV --전원을 켠다.

 이러면 samsung객체가 생성되는데 문제가 없다.

init-method()와 destroy-method(). 시작시 초기화해줄때 실핼항 부분과 마지막 종료전에 실행해야할 부분.

lazy-init.

GoF 디자인 패턴중 하나인 Singletone 패턴을 활용하기 위해 사용하는 scope. scope의 기본 값은 싱글톤이다.

<bean id="tv" class="polymorphism.SamsungTV" scope="singletone" />
TVUser.java
package polymorphism;

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

public class TVUser {
  public static void main(String[] args) {
    AbstractApplicationContext factory = new GenericXmlAplicationContext("applicationContext.xml");
    
    TV tv1 = (TV)factory.getBean("tv"); //객체는 메모리에 하나만 생성되어 유지됨.
    TV tv2 = (TV)factory.getBean("tv"); //그러니 SamsungTV 객체 생성 하나만 나옴.
    TV tv3 = (TV)factory.getBean("tv");

    factory.close();
  }
}

만약 scope가 prototype이면 매번 새로운 객체를 생성해 반환한다.