Autowired-Eigenschaft ist null - Spring-Boot-Konfiguration

Ich bin stecken mit null-Werten in einem autowired-Eigenschaft. Ich hoffe ich konnte einigen helfen.

Verwenden wir für das Projekt spring-boot-version 0.5.0.M6.

Den vier Konfigurationsdateien mit Bohnen in einem Paket und sortiert werden, "area":

  1. Der Konfiguration der Datenquelle
  2. Global-method-security-Konfiguration (wie wir Frühling-ACL)
  3. MVC Konfiguration
  4. Spring Security-Konfiguration

Die main-Methode, die bootstraps alles ist in der folgenden Datei:

@EnableAspectJAutoProxy
@EnableSpringConfigured
@EnableAutoConfiguration(exclude = {
    DataSourceTransactionManagerAutoConfiguration.class,
    HibernateJpaAutoConfiguration.class,
    JpaRepositoriesAutoConfiguration.class,
    SecurityAutoConfiguration.class,
    ThymeleafAutoConfiguration.class,
    ErrorMvcAutoConfiguration.class,
    MessageSourceAutoConfiguration.class,
    WebSocketAutoConfiguration.class
})
@Configuration
@ComponentScan
public class IntegrationsImcApplication {

    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = SpringApplication.run(
                IntegrationsImcApplication.c lass, args);
    }
}

Die erste Datei enthält die Konfiguration der Datenquelle Bohnen ist wie folgt (die ich ausgelassen habe, eine Methode, die Körperteile, um Sie lesbarer zu machen):

@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
@Configuration
public class RootDataSourceConfig 
        extends TomcatDataSourceConfiguration 
        implements TransactionManagementConfigurer {

    @Override
    public DataSource dataSource() {
        return jpaDataSource();
    }

    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return jpaTransactionManager();
    }

    @Bean
    public HibernateExceptionTranslator hibernateExceptionTranslator() {
        return new HibernateExceptionTranslator();
    }

    @Bean(name="jpaDataSource")
    public DataSource jpaDataSource() {......}

    @Bean(name = {"transactionManager","txMgr"})
    public JpaTransactionManager jpaTransactionManager() {......}

    @Bean(name = "entityManagerFactory")
    public EntityManagerFactory jpaEmf() {......}
}

Und hier ist die nächste Konfiguration-Datei ist, das hängt von der Datenquelle von oben. Es hat etwa 20 Bohnen verwandt ACL-Konfiguration, aber es scheitert an der Premieren-bean, die Daten verwendet Quelle:

@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration
public class RootGlobalMethodSecurityConfig 
        extends GlobalMethodSecurityConfiguration 
        implements Ordered {

    @Autowired
    public DataSource dataSource;

    @Override
    public int getOrder() {
        return IntegrationsImcApplication.ROOT_METHOD_SECURITY_CO NFIG_ORDER;
    }

    @Bean
    public MutableAclService aclService() 
            throws CacheException, IOException {

        MutableJdbcAclService aclService = new MutableJdbcAclService(
                dataSource, aclLookupStrategy(), aclCache());
        aclService.setClassIdentityQuery("SELECT @@IDENTITY");
        aclService.setSidIdentityQuery("SELECT @@IDENTITY");
        return aclService;
    }

    ...................................
}

Grundsätzlich aufrufen aclService() wirft einen Fehler wie dataSource null ist. Wir haben versucht, die Bestellung der Konfigurationsdateien durch die Umsetzung der Ordered - Schnittstelle. Wir haben auch versucht, mit @AutoConfigureAfter(RootDataSourceConfig.class) aber das hat auch nicht geholfen. Anstatt das zu tun @Autowired auf die DataSource wir haben auch versucht, die Injektion der RootDataSourceConfig Klasse selbst, aber es war immer noch null. Haben wir versucht, mit @DependsOn und @Ordered auf diese Bohnen aber wieder kein Erfolg. Wie es scheint, nichts kann injiziert werden in dieser Konfiguration.

Die Ausgabe der Konsole beim Systemstart ist die Auflistung der Bohnen in die Bestellung wir möchten Ihnen mit der Datenquelle als die erste. Wir sind ziemlich viel blockiert diese.

Ist es etwas, das seltsam oder einzigartig wir hier tun, das nicht funktioniert? Wenn dies wie vorgesehen, dann wie könnten wir injizieren Datenquelle anders?

Repo: github

  • Möglicherweise gibt es einige code, den wir noch nicht gesehen haben, die dazu zwingt, früh die Instanziierung Ihrer RootGlobalMethodSecurityConfig. Könnten Sie teilen das gesamte Projekt bitte (z.B. auf github)? Es ist einfacher, um das ganze Bild zu sehen dann.
  • Einige Allgemeine Beobachtungen: 1) die Meisten der @Order und @DependsOn Erklärungen sind wohl unnötig - der Frühling ist schlau genug, um herauszufinden, welche Abhängigkeiten in den meisten Fällen. 2) @EnableAspectJAutoProxy redundant ist. 3) All jene ausschließt, die in der Autokonfiguration Erklärung sind wohl auch überflüssig und Sie sind auf jeden Fall störend. 4) @AutoConfigureAfter gilt nur für die Autokonfiguration Klassen, und deine (nehme ich an) sind die normal-Komponente beans.
  • Dave, ich schob das Projekt auf github: link.
  • Das Projekt startet mit spring-boot 0.5.0.M5 ohne Fehler. Als M5 ist mit spring 4.0.0.M3 ich habe versucht mit spring-boot 0.5.0.M6 + spring 4.0.0.M3, und der Start schlägt fehl. Aber es läuft ok mit spring-boot 0.5.0.M5 + spring 4.0.0.RELEASE.
  • Es ist ein M7 können Sie versuchen (und auch Schnappschüsse). Wahrscheinlich einen Versuch Wert (ich kann bei Ihrem Projekt Aussehen auf morgen).
  • Github-Projekt aktualisiert M7 aber dasselbe Problem wie mit der M6. Ich erstellte arbeiten M5 Zweig dort zu vergleichen. Vielen Dank für Ihr Interesse und Glückliches Neues Jahr!!!!!
  • Ich kann nicht kommentieren, doch so, ich gepostet ein paar neue Informationen als Antwort. Ich schaffte es, um es zu arbeiten. Ich hoffe es ist der richtige Weg.

InformationsquelleAutor Dominika | 2013-12-31
Schreibe einen Kommentar