Spring @EnableSpringConfigured不起作用

时间:2017-10-10 07:18:44

标签: java spring spring-aop

我尝试使用@EnableSpringConfigured,但它不起作用。

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();
    }
}

以上四个java在同一个包中,我尝试运行EntityApplication.java并希望看到" Engine run",但实际结果总是" exec失败"。

帮助!代码在https://github.com/lemonguge/spring/tree/master/spring-core/spring-aspect/src/main/java/cn/homjie/spring/aspect/newx

2 个答案:

答案 0 :(得分:1)

您将Entity声明为spring组件,但在EntityBuilder的create()方法中,您手动创建Entity实例,这意味着你 没有使用由spring容器创建的Entity对象。 那么Spring如何将引擎实例自动连接到您自己的Entity实例中。 每次if (engine != null)变为假的原因。 如果您将类声明为spring组件,则spring容器会创建 他们的实例,我们需要他们,以获得正确的布线系统。如果这些类与布线相关联,请不要创建自己的实例。

答案 1 :(得分:1)

只有在启用加载时间时,Spring才能配置对象。您应该使用@EnableLoadTimeWeaving注释

标记配置

您需要加载时编织或编译时编织可配置注释