🍃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이면 매번 새로운 객체를 생성해 반환한다.