728x90
스프링이란 ?
BeanFactory 개념
예전 프로그래밍에서는 절차지향이였고 , 이후에 객체 지향이 되어가면서 다형성이 적용되었다.
[✔️절차 지향 ]
➡️ 인스턴스 교체가 필요할 경우 새로이 생성하여 사용
// test 01 . 절차지향
System.out.println("test 01 . 절차지향");
//SsTV tv = new SsTV();
//tv.turnOn();
//tv.turnOff();
//tv.soundUp();
//tv.soundDown();
//tv 교체가 필요할 경우 새로이 생성해야함.
LgTV tv = new LgTV();
tv.powerOn();
tv.powerOff();
tv.volumeUp();
tv.volumeDown();
[✔️객체 지향 ]
➡️ 관련성이 없는 두객체를 하나의 인터페이스로 묶어줌, 규칙성 부여
인터페이스에 정의된 메서드만 사용했다는 의미 (그러므로 교체가능)
TV 교체 필요 : 우측의 클래스만 교체 (단, 소스코드수정-재컴파일 이 필요함)
System.out.println("test 02 . 객체지향 : 다형성 적용");
TV tvi = new SsTVi();
tvi.powerOn();
tvi.powerOff();
tvi.volumeUp();
tvi.volumeDown();
System.out.println("TV를 교체 합니다 !");
tvi = new LgTVi();
tvi.powerOn();
tvi.powerOff();
tvi.volumeUp();
tvi.volumeDown();
[✔️ Factory 패턴 ]
소스 코드 수정 없이 실시간으로 교체 작업이 필요하게 되었다.
객체를 생성해서 교체해줄 역할자가 필요하다.
요구 사항에 따라 클래스를 Factory에게 전달하는 방법이 3가지가 있다.
1. xml 방식
2. @ 방식
3. JavaConfig(Java_code)
BeanFactory 의 형태를 이전에 Factory 라고 했다면 , 스프링은 스프링 컨테이너라고 함.
public TV getBean(String tv) {
if (tv!=null && tv.equals("ss")) {
return new SsTVi();
}
else if (tv!=null && tv.equals("lg")) {
return new LgTVi();
}
else {
return null;
}
} //getBean
} //BeanFactory
BeanFactory(스프링 컨테이너) 생성
AbstractApplicationContext sc =
new GenericXmlApplicationContext("iocDI01_xml/app02.xml");
인자에 기술된 형태로 실행시켜준다.
패키지의 정확한 위치를 알려줘야 한다.
- xml 파일 만들기
패키지 우클릭→new → spring Bean Configuration File
bean tag 를 통해 목록화 함.
bean Tag : new 생성을 요청하는 작업 지시서
1. id : 유일성이 있는 인지할 수 있는 식별자.
2. class : 패키지명.클래스명 (클래스는 실행시킬 클래스.)
3. lazy-init : 특정 객체나 변수를 필요할 때까지 초기화하지 않는 것
즉 , lazy-init 는 true 로 둔다면 , 전체 생성되지 않고 호출할때 생성됨으로 , 메모리 낭비를 막을 수 있다.
default 라면 , 무조건 생성됨을 의미.
<bean id="tv" class="iocDI01_xml.SsTVi" lazy-init="true"/>
<bean id="tvl" class="iocDI01_xml.LgTVi" lazy-init="true"/>
scope : 인스턴스 생성방식을 의미함.
빈을 생성할때 , 싱글톤 생성이 기본이다. 여러 인스턴스를 만들고 싶다면 , prototype을 줌.
<bean id="tv" class="iocDI01_xml.SsTVi" scope="prototype"/>
<bean id="tv" class="iocDI01_xml.SsTVi" scope="singleton"/>
<!--바로 위 코드는 <bean id="tv" class="iocDI01_xml.SsTVi" /> 와 같다 -->
- Singleton Test
TV tv1 = (TV)sc.getBean("tv");
TV tv2 = (TV)sc.getBean("tv");
System.out.println("싱글톤 테스트 tv1 : "+tv1);
System.out.println("싱글톤 테스트 tv2 : "+tv2);
System.out.println("TV 교체 ,");
tv1 = (TV)sc.getBean("tvl");
tv2 = (TV)sc.getBean("tvl");
System.out.println("싱글톤 테스트 tv1 : "+tv1);
System.out.println("싱글톤 테스트 tv2 : "+tv2);
- prototype Test
현재 상황에서 tvl 에 대해 prototype 적용
Singleton 에서는 주소값이 동일 , 생성자 1회 호출
prototype 에서는 주소값 일치하지 않음 , 생성자 다회 호출 됨을 비교 할 수 있다.
2. 필요 객체 전달 받고 Service 실행
TV tv =(TV)sc.getBean("tv");
//getBean 의 리턴타입이 object 타입임으로 강제 형변환이 필요.
if(tv !=null) {
tv.powerOn();
tv.powerOff();
tv.volumeUp();
tv.volumeDown();
}else {
System.out.println("tv 선택을 하지 않았습니다.");
}
➡️ Spring 컨테이너는 getBean 메서드를 실행해서 해당객체를 제공, 실시간으로 소스코드 수정없이 전달받음
'Developer > Spring eGov4.0 (Java11, Tomcat9)' 카테고리의 다른 글
Spring, 스프링의 MVC (1) | 2024.09.26 |
---|---|
Spring , java_config 방식을 활용한 스프링 빈 설정 관리, xml과 혼용 관리 (1) | 2024.09.26 |
Spring , @Autowired & @Qualifier 를 활용한 bean 주입 (0) | 2024.09.25 |
Spring , @Component 스프링 빈 등록 (0) | 2024.09.24 |
Spring , 의존성 처리 방법 (1) | 2024.09.24 |