방카@Dev
[Spring]Ch6.@Configuration을 이용한 빈 생성_올인원 스프링 프레임워크 본문
#기본 설정
- pom.xml에 해당 라인 추가
<!-- CGLIB Dependency -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
- xml파일을 IoC 컨테이너 설정 파일로 이용했는데, 애너테이션(@Configuration, @Bean)을 이용한 Java 파일로도 만들 수 있음
@Configuration
- 자바 파일의 클래스 선언부에 @Configuration 애너테이션 명시
import org.springframework.context.annotation.Configuration;
@Configuration
public class MemberConfig{
}
@Bean
import org.springframework.context.annotation.Configuration;
@Configuration
public class MemberConfig{
@Bean
public StudentDao studentDao(){
return new StudentDao();
}
xml | Java |
Bean 객체의 id | 메서드 이름 |
Bean 객체의 타입명 | 반환되는 데이터 타입 |
# 생성자를 이용해 의존 객체 주입하기
@Bean
public StudentRegisterService studentRegisterService(){
return new StudentRegisterService(studentDao());
//<constructor-arg ref="studentDao">
}
-XML에서 <constructor-arg> 태그를 이용하여 의존객체를 생성자의 매개변수에 주입했다면, studentDao() 메서드를 호출
setter 메서드를 이용한 주입
@Bean
public DBConnectionInfo dev_DBConnectionInfoDev() {
DBConnectionInfo dbConnectionInfo = new DBConnectionInfo();
dbConnectionInfo.setUrl("000.000.000.000");
dbConnectionInfo.setUserId("admin");
dbConnectionInfo.setUserPw("0000");
return dbConnectionInfo;
}
- setter 메서드를 이용해서 의존객체를 주입할 때 XML에서는 <property> 태그를 이용했다면, Java 코드에서는 객체 생성 후 생성된 객체의 setter 메서드를 직접 호출
# 스프링 컨테이너 초기화(Main method)
public class MainClassUseConfig {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(MemberConfig.class);
}
XML | @Configuration |
GenericXmlApplicationContext | AnnotationConfigApplicationContext |
# Java 파일 분리
@Configuration
public class MemberConfig3 {
@Autowired
DBConnectionInfo dev_DBConnectionInfoDev;
@Autowired
DBConnectionInfo real_DBConnectionInfoDev;
@Bean
public EMSInformationService eMSInformationService() {
(생략)
Map<String, DBConnectionInfo> dbInfos = new HashMap<String, DBConnectionInfo>();
dbInfos.put("dev", dev_DBConnectionInfoDev);
dbInfos.put("real", real_DBConnectionInfoDev);
emsInformationService.setDbInfos(dbInfos);
return emsInformationService;
}
}
- 스프링 설정 파일을 분리할 경우, 다른 자바 파일에서 생성한 Bean 객체 주입이 필요한 경우, 필드에 @Autowired를 통해 객체 주입
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(MemberConfig1.class, MemberConfig2.class, MemberConfig3.class);
# @Import 애너테이션
애너테이션을 이용해서 스프링 설정 파일을 제작할 때도 다른 Java 파일을 임포트할 수 있는데, 이때 사용되는 애너테이션이 @Import
@Configuration
@Import({MemberConfig2.class, MemberConfig3.class})
public class MemberConfigImport {
...
'BackEnd > Spring' 카테고리의 다른 글
[Spring]Ch8.Service와 DAO 구현_올인원 스프링 프레임워크 (1) | 2024.06.08 |
---|---|
[Spring]Ch7.스프링 MVC를 이용한 웹 서비스 프로젝트_올인원 스프링 프레임워크 (0) | 2024.06.07 |
[Spring]Ch4.IoC(Inversion of Control) 컨테이너_올인원 스프링 프레임워크 (1) | 2024.06.06 |
[Spring]Ch5.의존 객체 자동주입_올인원 스프링 프레임워크 (0) | 2024.06.06 |
[Spring]STS 및 spring MVC 환경 설정_MacOS (0) | 2024.06.01 |