2017-10-10 3 views
4

J'essaie d'utiliser @EnableSpringConfigured, mais cela ne fonctionne pas.Spring @EnableSpringConfigured ne fonctionne pas

Engine.java

@Component 
public class Engine { 

    public void run() { 
     System.out.println("Engine run"); 
    } 
} 

Entity.java

@Component 
@Configurable(autowire = Autowire.BY_TYPE) 
public class Entity { 

    @Autowired 
    private Engine engine; 

    public void exec() { 
     if (engine != null) 
      engine.run(); 
     else 
      System.out.println("exec failure"); 
    } 

} 

EntityBuilder.java

@Component 
public class EntityBuilder { 

    public Entity create() { 
     return new Entity(); 
    } 
} 

EntityApplication.java

@Configuration 
@ComponentScan 
@EnableSpringConfigured 
public class EntityApplication { 

    public static void main(String[] args) { 
     AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EntityApplication.class); 
     EntityBuilder builder = context.getBean(EntityBuilder.class); 
     builder.create().exec(); 
    } 
} 

Les quatre java ci-dessus dans le même paquet, j'essaie d'exécuter EntityApplication.java et je m'attends à voir "Engine run", mais le résultat actuel est toujours "exec failure".


aide! est le code dans https://github.com/lemonguge/spring/tree/master/spring-core/spring-aspect/src/main/java/cn/homjie/spring/aspect/newx

+0

ce qui est l'exception que vous obtenez –

+0

pas exception, juste en dehors « échec exec » @Arun Kumar Mudraboyina – HomJie

+0

quelle version de ressort vous utilisez –

Répondre

1

Spring peut configurer des objets uniquement si l'ondulation du temps de chargement est activée. Vous devez marquer votre configuration avec @EnableLoadTimeWeaving annotation

Vous devez soit le tissage charge du temps ou le temps de compilation tissage pour l'annotation Configurable

+0

Mais j'ai utilisé l'annotation @EnableSpringConfigured, le support est destiné à être utilisé pour les objets créés en dehors du contrôle d'un conteneur. donc quand je crée un nouvel objet, il devrait être aop et autowired. – HomJie

+0

J'ai mis à jour ma réponse –

+0

thx, c'est du travail – HomJie

1

Vous avez déclaré l'entité en tant que composant de source, mais à l'intérieur méthode EntityBuilder créer(), vous créer manuellement instance Entité qui signifie ne l'utilisez Entité objet qui est créé par conteneur de ressort. Alors, comment les fils de printemps auto moteur instance dans votre propre instance de l'entité. Raison pourquoi chaque fois if (engine != null) devenant faux. Si vous avez déclaré vos classes comme composants de ressort, le conteneur de ressort crée les instances pour eux et nous avons besoin de nous pour obtenir le bon système de câblage. Ne créez pas vos propres instances si ces classes liées au câblage.

+0

Mais j'ai utilisé l'annotation @EnableSpringConfigured, le support est destiné à être utilisé pour les objets créés en dehors du contrôle d'un conteneur. donc quand je crée un nouvel objet, il devrait être aop et autowired. – HomJie