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 기반 또는 주석 기반 설정 방식 과 비교 합 니 다.
  • 자바 류 의 설정 방식 은 코드 프로 그래 밍 방식 을 통 해 Bean 과 Bean 간 의 관 계 를 더욱 유연 하 게 실례 화 할 수 있다.
  • XML 이나 주 해 를 바탕 으로 하 는 방식 은 모두 성명 을 통 해 설정 을 정의 하기 때문에 유연성 은 떨 어 지지 만 설정 에 있어 서 는 더욱 간단 하 다.
  • @Configuration 주해 류 자체 에@Component 가 표시 되 어 있 기 때문에 이 종 류 는 일반적인 Bean 처럼 다른 Bean 에 주입 할 수 있 습 니 다.
    
    @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 의에 의 해 스 캔 될 수 있 습 니 다.따라서 설정 클래스 를 XML 설정 파일 에 조립 하고 XML 설정 파일 을 통 해 Spring 을 시작 하려 면 XML 에서을 통 해 해당 설정 클래스 를 검색 하면 됩 니 다.
    
    <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 간 의 조립 을 스마트 하 게 완성 할 수 있다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기