为什么我的直接自动属性注入变成null?

  • 本文关键字:注入 属性 null java spring
  • 更新时间 :
  • 英文 :


所以我尝试通过字段注入接口实现。但是不知道为什么它是空的。

Package
com.a
Interfacex
com.b
Interfaceximpl

Interfacex.java

public interface Interfacex {
void doA ();
}

Interfaceximpl.java

@Component
public class Interfaceximpl implements interfacex { 
@Override
void doA(){
// do something
}
}

Main.java

public class Main {
@Autowired
Interfacex interfacex;
public static void main (String args[]){ //....}
}

这个接口似乎为空。

@Configuration
@ComponentScan("com")
public class AppConfig { // nothing here}

在我的例子中没有这样的setter注入。我只是注入了接口with@Autowired为什么是空的?

你真的把@Autowired放在主类的字段上,还是它只是一个插图?如果您这样做-它将无法工作,因为可以发生@Autowired的类必须由Spring自己管理。在这种情况下,它显然不是,因为它是一个特殊的类——一个应用程序的入口点…

我建议这样写:

@Component 
public class EntryPoint {


@Autowired
Interfacex interfacex; 
public void foo() {
// interfacex shouldn't be null 
// because everything is managed by spring now
interfacex.doA();
} 
}
public class Main {
public static void main(..) {
ApplicationContext ctx = ...
EntryPoint ep = ctx.getBean(EntryPoint.class);
ep.foo();
}
}

@Autowired注释不会被spring识别和操作,除非该类是bean。

在这种情况下,'Main'类不是bean。所以,@Autowired什么也做不了。

你需要让'Main'成为一个bean。一种方法是在该类中添加@Component注释。

而且,这似乎只是你试图理解工作的东西。这样的话,你可以试试我上面的建议。

如果您要为prod做这些,那么您应该更改类结构,类和变量名称以及创建bean的方式。

相关内容

  • 没有找到相关文章

最新更新