728x90
Factory 패턴
다시보는 Factory 패턴에 대하여..
소스 코드 수정 없이 실시간으로 교체 작업이 필요하게 되었다.
객체를 생성해서 교체해줄 역할자가 필요하다.
요구 사항에 따라 클래스를 Factory에게 전달하는 방법이 3가지가 있다.
1. xml 방식
2. @ 방식
3. JavaConfig(Java_code)
지금 보는 방식은 3번에 해당한다.
자바 클래스를 활용한 스프링 빈 설정
이때 가장 중요한 애노테이션이 두가지가 있는데 , @Configuration과 @Bean이다.
[✔️1. @Configuration ]
@Configuration은 해당 클래스가 스프링 설정 파일로 사용됨 을 의미
이 클래스는 설정 파일 역할을 하므로, XML 설정 파일 없이도 자바 코드에서 직접 빈을 등록
-사용시 주의사항
final이 아니어야 하며,기본 생성자가 필요함
@Configuration
public class JavaConfig01 {
// 빈을 정의하는 메서드들을 포함하는 설정 클래스
}
[✔️2. @Bean ]
@Bean은 스프링 컨테이너가 메서드에서 반환된 객체를 빈으로 등록 하게 만들어줌.
메서드의 이름이 빈의 ID 가 되며, 이 ID로 스프링 컨테이너에서 해당 빈을 참조
빈으로 등록된 객체는 다른 클래스에서 Class_Name.getBean("Bean_Name") 로 호출 가능.
@Configuration
public class JavaConfig01 {
@Bean
public TV tv() {
return new SsTVi(); // 이 메서드가 스프링 빈으로 등록됨
}
}
- 다른 클래스에서 AnnotationConfigApplicationContext 클래스를 통해 스프링 컨테이너를 생성후 getBean()으로의 호출
public class Main {
public static void main(String[] args) {
// JavaConfig01 클래스를 기반으로 스프링 컨테이너를 생성
AbstractApplicationContext sc = new AnnotationConfigApplicationContext(JavaConfig01.class);
// getBean()을 사용해서 'tv' 빈을 가져옴
TV myTV = (TV) sc.getBean("tv");
myTV.powerOn();
}
}
xml 과 java_config 혼용 사용
[✔️ @ImportResource("xml경로") ]
XML 설정 파일을 자바 설정 파일과 함께 사용 할 수 있도록 도와주는 애노테이션
자바 설정 파일에서 XML 설정 파일을 읽어와 빈을 정의할 수 있다.
@ImportResource("iocDI03_jc/app09.xml")
@Configuration
public class JavaConfig02 {
// 설정 클래스 JavaConfig02에서 XML 설정을 함께 사용 가능
@Bean
public TV lgtv() {
return new LgTVs(sp(), "Blue", 9988000); // Speaker 빈을 생성자 주입 방식으로 전달
}
@Bean
public Speaker sp() {
return new Speaker(); // Speaker 객체를 빈으로 등록
}//xml 과 동시에 동일 id로 생성하면 싱글턴 적용으로 인스턴스는 1개만 생성
@Bean
public TV aitv() {
return new AiTVs(); // AiTVs 빈을 자바 설정에서 정의
}
}
<bean id="sp" class="iocDI03_jc.Speaker" />
//이 빈은 id="sp"라는 이름으로 등록되며, iocDI03_jc.Speaker 클래스의 인스턴스로 생성
[➡️ 반대로 xml 파일이 main 이고 추가적으로 config 파일을 사용할때 ?]
<bean class="iocDI03_jc.JavaConfig04" />
//이 설정을 통해 스프링은 JavaConfig04 클래스에서 정의된 빈들을 스프링 컨테이너에 등록
<context:annotation-config />
//이 설정은 @Autowired, @Bean, @Component 등의 애노테이션을 인식하고 처리
@Configuration//이 클래스가 스프링 설정 파일로 사용된다
public class JavaConfig04 {
@Bean// 스프링 빈으로 등록 id는 lgtv
public TV lgtv() {
return new LgTVsi(new SpeakerB(), "Pink", 4455000);
}
@Bean// 스프링 빈으로 등록 id는 aitv
public TV aitv() {
return new AiTVsi();
}
}
'Developer > Spring eGov4.0 (Java11, Tomcat9)' 카테고리의 다른 글
spring , service를 나누는 이유 (0) | 2024.09.27 |
---|---|
Spring, 스프링의 MVC (1) | 2024.09.26 |
Spring , @Autowired & @Qualifier 를 활용한 bean 주입 (0) | 2024.09.25 |
Spring , @Component 스프링 빈 등록 (0) | 2024.09.24 |
Spring , 의존성 처리 방법 (1) | 2024.09.24 |