Spring 에서 자바 류 를 기반 으로 설정 하 는 전체 절차
JavaConfig 는 원래 Spring 의 키 프로젝트 로 자바 류 를 통 해 Bean 의 정의 정 보 를 제공 합 니 다.Spring 4 버 전에 서 JavaConfig 는 Spring 4 의 핵심 기능 이 되 었 습 니 다.
본 고 는 Spring 에서 자바 류 를 바탕 으로 배치 하 는 것 에 관 한 내용 을 상세 하 게 소개 할 것 입 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.
1 정의 Bean
일반적인 POJO 는@Configuration 주석 만 표시 하면 Spring 용기 에 Bean 의 정의 정 보 를 제공 할 수 있 습 니 다.
@Configuration
public class SystemConfig {
/**
* Bean,
*
* @return
*/
@Bean
public UserDao userDao() {
return new UserDao();
}
@Bean
public DeptDao deptDao() {
return new DeptDao();
}
/**
* UserService, UserDao DeptDao
*
* @return
*/
@Bean
public UserService userService() {
UserService service = new UserService();
service.setUserDao(userDao());
service.setDeptDao(deptDao());
return service;
}
}
이 종류의 방법 은@Bean 주 해 를 표시 합 니 다.즉,Bean 을 정의 하기 위해 Bean 의 유형 은 방법 반환 값 의 유형 에 의 해 결정 되 며,이름 은 기본 값 과 방법 명 이 같 으 며,입 참 을 통 해 지정 한 Bean 이름 을 표시 할 수 있 습 니 다.예 를 들 어@Bean(name="xxx").@빈 이 표시 한 방법 체 는 빈 의 논 리 를 예화 시 켰 다.위 설정 과 아래 xml 는 같은 효 과 를 가 집 니 다:
<bean id="userDao" class="net.deniro.spring4.conf.UserDao"/>
<bean id="deptDao" class="net.deniro.spring4.conf.DeptDao"/>
<bean id="userService" class="net.deniro.spring4.conf.UserService"
p:userDao-ref="userDao" p:deptDao-ref="deptDao"/>
자바 클래스 기반 설정 방식 은 XML 기반 또는 주석 기반 설정 방식 과 비교 합 니 다.
@Configuration
public class ApplicationConfig {
@Autowired
private SystemConfig systemConfig;
@Bean
public AuthorityService authorityService() {
AuthorityService service = new AuthorityService();
service.setUserDao(systemConfig.userDao());
service.setDeptDao(systemConfig.deptDao());
return service;
}
}
Spring 은 설정 클래스 에@Bean 이 표 시 된 모든 방법 에 AOP 를 사용 하여 Bean 의 생명주기 관리 논 리 를 도입 합 니 다.예 를 들 어 위의 systemConfig.userDao()는 Bean 에 대응 하 는 단일 예 를 되 돌려 줍 니 다.@Bean 에서 우 리 는@Scope 주 해 를 표시 하여 Bean 의 역할 범 위 를 제어 할 수 있 습 니 다.
@Scope("prototype")
@Bean
public DeptDao deptDao() {
return new DeptDao();
}
이렇게 하면 deptDao()방법 을 호출 할 때마다 새로운 인 스 턴 스 를 되 돌려 줍 니 다.
assertNotSame(authorityService.getDeptDao().hashCode(),authorityService
.getDeptDao().hashCode());
메모:자바 클래스 를 기반 으로 설정 합 니 다.클래스 경로 에 Spring AOP 와 CGLib 라 이브 러 리 가 있어 야 합 니 다.2 스프링 용기 시동
2.1@Configuration 클래스 만 사용
AnnotationConfigapplicationContext 류 의 구조 함 수 를 사용 하여@Configuration 이 표 시 된 자바 류 에 전송 하여 Spring 용 기 를 시작 할 수 있 습 니 다.
ApplicationContext context=new AnnotationConfigApplicationContext(SystemConfig
.class);
UserService userService= (UserService) context.getBean("userService");
assertNotNull(userService);
@Configuration 설정 클래스 가 여러 개 있 으 면 AnnotationConfigapplicationContext 에 등록 한 다음 용기 새로 고침 을 통 해 이 설정 클래스 를 적용 할 수 있 습 니 다.
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext();
//
context.register(SystemConfig.class);
context.register(ApplicationConfig.class);
// ( )
context.refresh();
ApplicationConfig config=context.getBean(ApplicationConfig.class);
assertNotNull(config);
@Import 를 통 해 여러 설정 클래스 를 하나의 설정 클래스 에 조립 한 다음 에 이 조립 된 설정 클래스 만 등록 하면 용 기 를 시작 할 수 있 습 니 다.
@Configuration
@Import(SystemConfig.class)
public class ApplicationConfig2 {
@Autowired
private SystemConfig systemConfig;
@Bean
public AuthorityService authorityService() {
AuthorityService service = new AuthorityService();
service.setUserDao(systemConfig.userDao());
service.setDeptDao(systemConfig.deptDao());
return service;
}
}
유닛 테스트:
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(ApplicationConfig2.class);
ApplicationConfig2 config=context.getBean(ApplicationConfig2.class);
assertNotNull(config);
final AuthorityService authorityService = config.authorityService();
assertNotNull(authorityService.getDeptDao());
assertNotSame(authorityService.getDeptDao().hashCode(),authorityService
.getDeptDao().hashCode());
2.2 XML 파일 을 사용 하여@Configuration 클래스 의 설정 을 참조 합 니 다.@Configuration 이 표 시 된 설정 클래스 도 Bean 이기 때문에 Spring 의
<context:component-scan base-package="net.deniro.spring4.conf"
resource-pattern="ApplicationConfig2.class"
/>
2.3@Configuration 클래스 에서 XML 파일 설정 참조@Configuration 설정 클래스 에서@ImportResource 를 통 해 XML 설정 파일 을 직접 도입 할 수 있 습 니 다.@Autowired 를 통 해 xml 설정 파일 에 정 의 된 Bean 을 직접 참조 할 수 있 습 니 다.
프로필:
<bean id="groupDao" class="net.deniro.spring4.conf.GroupDao"/>
<bean id="roleDao" class="net.deniro.spring4.conf.RoleDao"/>
@Configuration 클래스:
@ImportResource("classpath:beans5-11.xml")
@Configuration
public class ServiceConfig {
@Bean
@Autowired
public RelationService relationService(GroupDao groupDao,RoleDao roleDao){
RelationService service=new RelationService();
service.setGroupDao(groupDao);
service.setRoleDao(roleDao);
return service;
}
}
유닛 테스트:
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext
(ServiceConfig.class);
ServiceConfig config=context.getBean(ServiceConfig.class);
assertNotNull(config);
RelationService service=config.relationService((GroupDao) context.getBean
("groupDao"),
(RoleDao) context
.getBean
("roleDao"));
assertNotNull(service.getRoleDao());
이러한 서로 다른 형식의 Bean 의 정의 정 보 를 Spring 용기 에 불 러 올 수 있다 면 Spring 은 Bean 간 의 조립 을 스마트 하 게 완성 할 수 있다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.