2012-05-18 4 views
0

나는 일반적인 애플리케이션 컨텍스트 XML 파일을 가진 스프링 MVC 프로젝트를 가지고있다. 이 파일은 i18n의 기본 등록 정보 파일과 데이터베이스에 연결하는 데이터 소스 등 내 응용 프로그램의 일반 구성을 정의합니다. 이 컨텍스트 파일을 정의하는 동안, 사용할 데이터 소스, 두 번째 레벨 캐싱 (eh-cache) 등과 같은 기본 구성을 갖는 세션 팩토리를 정의하려고합니다. 그러나 여기에는 내 응용 프로그램이로드 할 엔터티 빈 목록이 포함되지 않습니다. 엔티티 빈의 매핑을 별도의 파일에만 보관하고 필요에 따라로드하려고합니다.스프링 빈 확장

기본 파일에서 정의한 세션 팩토리를 확장하고 추가 엔티티 bean 만 추가 할 수 있습니까? 결국에는 별도의 엔티티 집합을로드하는 여러 스프링 구성 파일을 갖게됩니다. 이것이 성취 될 수 있는가?

답변

1

몇 가지 가능성이 있습니다.

  • PropertyPlaceHolderConfigurer을 사용하면 엔티티 목록을 속성 파일로 외부화 할 수 있습니다. (속성 파일에서 SPEL을 사용할 수 있습니다).

  • 추상 빈 정의를 사용하여 다른 sessionFactory 빈에서 상위로 사용할 수 있으며 EnviromentPropertySource을 기반으로 가져올 수 있습니다. 최대 절전 모드 SessionFactory 당신이 어떤 BeanFactoryPostProcessor

    편집에 의해 수행되어야 할 SessionFactoryBean을 설정하는 작업 때문에 afterPropertiesSet 방법에 빌드 SessionFactory IT와 SessionFactoryBean를 구축 한 후 inmutable입니다

귀하의 의견을 읽은 후, EntityClassHolder 빈을 선언하고 Autowire 콜렉션 기능을 사용하여 EntityClassFactoryBean 그쪽에있는 모든 항목을 가져올 수 있다고 생각합니다. 단일 SessionFactoryBean에 주사 할 수 있습니다. 하지만 난하지 그게 당신이하려는 경우 확인하십시오 당신은 예를 들어 여러 applicatonContext-xxx.xml이있는 경우, 이제

public class EntityClassHolder { 

    List<Class<?>> entityClasses; 

    public List<Class<?>> getEntityClasses() { 
    return entityClasses; 
    } 

    public void setEntityClasses(List<Class<?>> entityClasses) { 
    this.entityClasses = entityClasses; 
    } 
} 



    public class EntityClassFactoryBean extends AbstractFactoryBean<List<Class<?>>> { 

    @Autowired 
    List<EntityClassHolder> list; 

    @Override 
    public Class<?> getObjectType() { 
     return List.class; 
    } 

    @Override 
    protected List<Class<?>> createInstance() throws Exception { 
     ArrayList<Class<?>> classList = new ArrayList<Class<?>>(); 
     for (EntityClassHolder ech : list) { 
      classList.addAll(ech.getEntityClasses()); 
     } 

     return classList; 
    } 
} 

을의 SessionFactoryEntityClassHolder 콩에 definied 엔티티 클래스로 구성 될 때를 그 중 하나를로드하십시오.

+0

의견을 보내 주셔서 감사합니다. 부모 빈 확장 메커니즘을 통해 SessionFactory 확장을 구현할 수있었습니다. 그러나 이는 다중 세션 팩토리를 작성합니다. 같은 sessionfactory를 사용할 수 있습니까? 그리고 몇 가지 추가 엔티티 bean 참조 만 추가하는 방법이 있습니까? 다중 세션 팩토리가 문제를 일으키는 지 확신 할 수 없습니다. –

+0

아이디어는 하나의 SessionFactory를로드하고 구성을 통해 하나를 선택하는 것이 었습니다. –

+0

그러나 jose, 나는 동적으로로드해야하는 몇 가지 독립적 인 모듈이 있습니다. 로드 될 모듈 자체는 런타임 구성입니다. 시스템의 전반적인 성능이 떨어지지 않도록하기 위해 생성 된 세션 팩토리의 총 수를 줄여야합니다. 또한 Hibernate Bean 포함에 대한 참조로 PropertySource를 얻는 방법에 대한 몇 가지 예제를 링크 할 수 있습니까? 나는 아무 것도 찾을 수 없었다. –