Pas de bean nommé 'org.springframework.contexte.annotation.ConfigurationClassPostProcessor.importRegistry " est défini

je suis en train de lancer un package complet de test junit classes, et j'ai un audit des classes pour mes classes de domaine comme suit:

    @PrePersist
    public void prePersist(AuditableEntity e) {

      UserService userService = SpringBeanFactory.getBean(UserService.class);  
      //some auditing here  
    }

- SpringBeanFactory classe:

public class SpringBeanFactory {

    private static ApplicationContext applicationContext;

    public static <T> T getBean(final String name, final Class<T> requiredType) {
        T bean = null;
        if (applicationContext != null) {
            bean = applicationContext.getBean(name, requiredType);
        }
        return bean;
    }

    public static <T> T getBean(final Class<T> requiredType) {
        T bean = null;
        if (applicationContext != null) {
            bean = applicationContext.getBean(requiredType);
        }
        return bean;
    }

    public static void setApplicationContext(final ApplicationContext applicationContext) {
        if (SpringBeanFactory.applicationContext == null) {
            SpringBeanFactory.applicationContext = applicationContext;
        }
    }

}

-Classe de Test config:

@Autowired
private ApplicationContext applicationContext;

@Before
public void before() throws Exception {

    SpringBeanFactory.setApplicationContext(applicationContext);

}

-SpringTestingConfig classe:

@Configuration
@ComponentScan(basePackages = "com.myapp.data", excludeFilters = { @Filter(Configuration.class) })
@PropertySource("classpath:/test.properties")
@Profile("test")
public class SpringTestingConfig {
private static Logger log = (Logger)LoggerFactory.getLogger(SpringTestingConfig.class);
@Autowired
private ApplicationContext applicationContext;
@Bean
public DataSource XdataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
if(log.isDebugEnabled()) log.debug("profile.name", "test");
System.setProperty("profile.name", "test");
dataSource.setDriverClassName("org.h2.Driver");
String schemaName = ConfigurationUtil.config().getString("db.schema.name").toLowerCase();
log.debug("SCHEMA IS " + schemaName);
String url = "jdbc:h2:mem:test;MODE=Mysql;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS " +schemaName +"\\;" + "SET SCHEMA "+schemaName;
dataSource.setUrl(url);
//dataSource.setUrl("jdbc:h2:mem:test;MODE=Mysql;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS "    + schemaName);
dataSource.setUsername("sa");
//use your own local mysql in tests here...
//     dataSource.setDriverClassName("com.mysql.jdbc.Driver");
//     dataSource.setUrl("jdbc:mysql://localhost:3306/mv_tests?characterEncoding=UTF-8");
//     dataSource.setUsername("tomcat");
//     dataSource.setPassword("tomcat");
//       
return dataSource;
}
@Bean
public DataSource dataSource() {
SpringBeanFactory.setApplicationContext(applicationContext);
LoggerUtils.setAllApplicationLogs("DEBUG");
DriverManagerDataSource dataSource = new DriverManagerDataSource();
if(log.isDebugEnabled()) {
log.debug("profile.name", "test");
}
System.setProperty("profile.name", "test");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
String schemaName = ConfigurationUtil.config().getString("db.schema.name");
String username = ConfigurationUtil.config().getString("db.username");
String password = ConfigurationUtil.config().getString("db.password");
if( log.isDebugEnabled() ) {
log.debug( "SCHEMA IS " + schemaName );
log.debug( "Username IS " + username );
log.debug( "Password IS " + password );
}
dataSource.setUrl("jdbc:mysql://localhost:3306/"+schemaName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}

-Classe de Test annotations:

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ WebContextTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class })
@ActiveProfiles("test")
@DirtiesContext
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = { SpringConfig.class, SpringTestingConfig.class, SpringLocalContainerJPAConfig.class, CustomConfiguration.class })
@Transactional

quand ma méthode d'essai tente d'enregistrer une entité, il fait appel à PrePersist méthode qui, à son tour, fait appel à l'arriver du printemps de service:

UserService userService = SpringBeanFactory.getBean(UserService.class);

qui à son tour produit de l'exception suivante:

Error creating bean with name 'userService': 
Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Could not autowire field: private com.motivosity.data.repository.UserRepository com.motivosity.service.impl.UserServiceImpl.userRepository; 
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepositoryImpl': 
Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'springLocalContainerJPAConfig': Injection of autowired dependencies failed; 
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: 
javax.sql.DataSource com.motivosity.data.config.SpringLocalContainerJPAConfig.dataSource; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'springTestingConfig': Initialization of bean failed; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'org.springframework.cache.annotation.ProxyCachingConfiguration': 
Initialization of bean failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No bean named 'org.springframework.context.annotation.ConfigurationClassPostProcessor.importRegistry' is defined

je dois mentionner que cette exception se produit lors de l'exécution d'un package complet de classes de test, mais lors de l'exécution de cette classe de test séparément, aucune exception n'est produite.

BTW, je suis en utilisant printemps 3.2.3.COMMUNIQUÉ de

Mise à JOUR: lorsque j'ai mis à jour le printemps version à la dernière version 4.0.3, je reçois une nouvelle exception sur le même obtenir UserService ligne:

org.springframework.context.support.GenericApplicationContext@3aa54263 has been closed already

veuillez informer comment le réparer de cette exception.

OriginalL'auteur Mahmoud Saleh | 2014-05-10