我试着使用@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并期望看到“引擎运行”,但实际结果总是"exec失败“。
发布于 2017-10-10 08:26:41
只有在启用加载时间波动时,Spring才能配置对象。应该用@EnableLoadTimeWeaving注释标记您的配置。
对于Configurable注释,您需要加载时编织或编译时编织。
发布于 2017-10-10 08:24:34
您将实体声明为spring组件,但在EntityBuilder create()方法中,您手动创建实体实例,这意味着您没有使用由spring容器创建的实体对象。那么,弹簧自动连接引擎实例如何进入您自己的实体实例。为什么每次if (engine != null)变得错误。如果您将类声明为spring组件,spring容器将为它们创建实例,为了获得正确的布线系统,我们需要它们。如果这些类与连线相连,不要创建自己的实例。
https://stackoverflow.com/questions/46660723
复制相似问题