我尝试使用@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失败"。
答案 0 :(得分:1)
您将Entity声明为spring组件,但在EntityBuilder的create()方法中,您手动创建Entity实例,这意味着你
没有使用由spring容器创建的Entity对象。
那么Spring如何将引擎实例自动连接到您自己的Entity实例中。
每次if (engine != null)
变为假的原因。
如果您将类声明为spring组件,则spring容器会创建
他们的实例,我们需要他们,以获得正确的布线系统。如果这些类与布线相关联,请不要创建自己的实例。
答案 1 :(得分:1)
只有在启用加载时间时,Spring才能配置对象。您应该使用@EnableLoadTimeWeaving
注释
您需要加载时编织或编译时编织可配置注释