2011-04-07 19 views
6

Actualmente estoy mezclado usando AnnotationConfigApplicationContext y ClasspathXmlApplicationContext, y hago AnnotationConfigApplicationContext como contexto primario. Pero descubrí que los beans definidos en AnnotationConfigApplicationContext no se adaptan bien a los beans definidos en ClasspathXmlApplicationContext. Así que me gustaría dejar ClasspathXmlApplicationContext de todos modos, y hacer que mi aplicación use AnnotationConfigApplicationContext solamente. El problema es que no sé cómo reemplazar <context:component-scan> totalmente. Puedo hacer un escaneo de paquetes fácilmente usando AnnotationConfigApplicationContext.scan(...), pero parece que no hay manera de agregar el patrón de inclusión/exclusión en AnnotationConfigApplicationContext.Hacer el contexto: ¿forma de escaneo componente-escaneo?

¿Alguna idea?

+0

también echar un vistazo a http://stackoverflow.com/questions/259140/scanning-java-annotations-at-runtime –

Respuesta

5

No parece que la clase AnnotationConfigApplicationContext proporciona filtros de exclusión/inclusión listos para usar. Internamente, la clase usa una instancia de ClassPathBeanDefinitionScanner para buscar anotaciones que proporcionen los métodos addExcludeFilter y addIncludeFilter. Desafortunadamente, el campo es private y no tiene un método getter por lo que no puede simplemente escribir una implementación que extienda AnnotationConfigApplicationContext y agregar métodos de inclusión y exclusión. En su lugar es probable que tenga que copiar el código de AnnotationConfigApplicationContext y añadir los métodos que faltan:

public void addExcludeFilter(TypeFilter excludeFilter) 
{ 
    this.scanner.addExcludeFilter(excludeFilter); 
} 

public void addIncludeFilter(TypeFilter includeFilter) 
{ 
    this.scanner.addIncludeFilter(includeFilter); 
} 
Cuestiones relacionadas