Java 弹簧自动连线为空
我有一个简单的代码来理解SpringDI的功能 这是我在Java 弹簧自动连线为空,java,spring,dependency-injection,autowired,Java,Spring,Dependency Injection,Autowired,我有一个简单的代码来理解SpringDI的功能 这是我在tester.java中的代码: package.com.email; @组成部分 公共类测试员{ @自动连线 专用静态EmailService EmailService; 公共静态void main(字符串[]args){ ApplicationContext上下文=新的ClassPathXmlApplicationContext(“spring config.xml”); System.out.println(“emailService
tester.java中的代码:
package.com.email;
@组成部分
公共类测试员{
@自动连线
专用静态EmailService EmailService;
公共静态void main(字符串[]args){
ApplicationContext上下文=新的ClassPathXmlApplicationContext(“spring config.xml”);
System.out.println(“emailService:+emailService);//为空
}
}
接口电子邮件服务{
字符串sayHello();
}
@组成部分
类EmailServiceImpl实现EmailService{
公共字符串sayHello(){
回复“你好”;
}
}
下面是spring config.xml
:
我声明了emailService
bean,它引用EmailServiceImpl
类,为什么我在emailService
中得到null
?注释不起作用,因为字段是静态的
。换成
@Autowired
private EmailService emailService;
注释不起作用,因为该字段是静态的。换成
@Autowired
private EmailService emailService;
问题是您试图通过自动连线设置的字段被声明为静态。从设计的角度来看,在静态字段上使用依赖项注入是没有意义的,但如果必须,可以使用setter方法
@Autowired
void setEmailService (EmailService emailService) {
Tester.emailService = emailService;
}
问题是您试图通过自动连线设置的字段被声明为静态。从设计的角度来看,在静态字段上使用依赖项注入是没有意义的,但如果必须,可以使用setter方法
@Autowired
void setEmailService (EmailService emailService) {
Tester.emailService = emailService;
}
这是因为注释不起作用。@RomanC为什么?我在xml
文件中激活了它。@RomanC我收到警告:静态字段不支持自动连线批注:private static com.email.EmailService com.email.Tester.EmailService
@RomanC我制作了EmailService
static以便能够在main方法中测试它,解决方案是什么?这是因为注释不起作用。@RomanC为什么?我在xml
文件中激活了它。@RomanC我收到警告:静态字段不支持自动连线批注:private static com.email.EmailService com.email.Tester.EmailService
@RomanC我制作了EmailService
static以便能够在main方法中测试它,解决方案是什么?那么我如何在main
方法中测试它呢?简单的方法是使用ctx.getBean()
。那么我如何在main
方法中测试它呢?简单的方法是使用ctx.getBean()
。