这有点难以解释......希望这个问题不是含糊的......
您可以查看代码以了解想法...
ClassA.java
public class ClassA {
@Autowired
InterA abcd;
public void dododo() {
abcd.doit();
}
}
ClassB.java
@Component
public class ClassB implements InterA {
@Override
public void doit() {
System.out.println("hoo hoo");
}
}
ClassC.java
@Component("classc")
public class ClassC {
public void doFromAbove() {
ClassA cls = new ClassA();
cls.dododo();
}
}
接口InterA.java
public interface InterA {
public void doit();
}
配置ClassConfig.java(在同一个包的其他java类文件上)
@Configuration
@ComponentScan
public class ClassConfig {
}
主要方法
public static void main(String[] args) {
try(AbstractApplicationContext appctx = new AnnotationConfigApplicationContext(ClassConfig.class)) {
ClassC obj = (ClassC) appctx.getBean("classc");
obj.doFromAbove();
}
}
当我执行 main 方法时,ClassA
没有注入 Autowired 字段“abcd”并导致NullPointerException
它仅在我声明ClassA
为 a@Component
并获得它的 bean 时才有效......间接自动装配不会发生
我应该解耦ClassA
并使ClassC
一切松散耦合吗?
是否有任何简单的注释可以用来告诉 Spring 自动注入 @Autowired 字段,即使对象是以紧密耦合的方式创建的?
注意
请不要告诉我使用 ApplicationContextClassC
来创建ClassA
.
任何可以找到答案的Spring Geek?