Spring@EnableSpring配置无效

Spring @EnableSpringConfigured not work

我尝试使用@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 failure"。


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

您将 Entity 声明为 spring 组件,但在 EntityBuilder create() 方法中,您手动创建了 Entity 实例,这意味着您 没有使用由 spring 容器创建的实体对象。 那么 spring 如何将 Engine 实例自动连接到您自己的 Entity 实例中。 为什么每次 if (engine != null) 都变成 false 的原因。 如果您将 类 声明为 spring 组件,spring 容器会创建 它们的实例,我们需要使用它们以获得正确的布线系统。如果那些 类 通过布线连接,请不要创建您自己的实例。

Spring 只有在启用加载时间波动的情况下才能配置对象。您应该使用 @EnableLoadTimeWeaving 注释

标记您的配置

对于 Configurable 注释,您需要加载时织入或编译时织入