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"。
您将 Entity 声明为 spring 组件,但在 EntityBuilder create() 方法中,您手动创建了 Entity 实例,这意味着您
没有使用由 spring 容器创建的实体对象。
那么 spring 如何将 Engine 实例自动连接到您自己的 Entity 实例中。
为什么每次 if (engine != null)
都变成 false 的原因。
如果您将 类 声明为 spring 组件,spring 容器会创建
它们的实例,我们需要使用它们以获得正确的布线系统。如果那些 类 通过布线连接,请不要创建您自己的实例。
Spring 只有在启用加载时间波动的情况下才能配置对象。您应该使用 @EnableLoadTimeWeaving
注释
标记您的配置
对于 Configurable 注释,您需要加载时织入或编译时织入
我尝试使用@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"。
您将 Entity 声明为 spring 组件,但在 EntityBuilder create() 方法中,您手动创建了 Entity 实例,这意味着您
没有使用由 spring 容器创建的实体对象。
那么 spring 如何将 Engine 实例自动连接到您自己的 Entity 实例中。
为什么每次 if (engine != null)
都变成 false 的原因。
如果您将 类 声明为 spring 组件,spring 容器会创建
它们的实例,我们需要使用它们以获得正确的布线系统。如果那些 类 通过布线连接,请不要创建您自己的实例。
Spring 只有在启用加载时间波动的情况下才能配置对象。您应该使用 @EnableLoadTimeWeaving
注释
对于 Configurable 注释,您需要加载时织入或编译时织入