Spring 自动装配为空
Spring autowired is null
我有一个简单的代码来理解 Spring DI 功能。
这是我在 tester.java
中的代码:
package com.email;
@Component
public class Tester {
@Autowired
private static EmailService emailService;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
System.out.println("emailService: " + emailService); // is null
}
}
interface EmailService {
String sayHello();
}
@Component
class EmailServiceImpl implements EmailService {
public String sayHello() {
return "Hello";
}
}
这里是 spring-config.xml
:
<bean id="emailService" class="com.email.EmailServiceImpl"/>
<context:annotation-config/>
<context:component-scan base-package="com.email"/>
我声明了指向 EmailServiceImpl
class 的 emailService
bean,为什么我在 emailService
中得到 null
?
注释无效,因为该字段是 static
。改成
@Autowired
private EmailService emailService;
问题是您试图通过自动装配设置的字段被声明为静态的。从设计的角度来看,在静态字段上使用依赖注入确实没有意义,但如果必须,可以使用 setter 方法。
@Autowired
void setEmailService (EmailService emailService) {
Tester.emailService = emailService;
}
我有一个简单的代码来理解 Spring DI 功能。
这是我在 tester.java
中的代码:
package com.email;
@Component
public class Tester {
@Autowired
private static EmailService emailService;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
System.out.println("emailService: " + emailService); // is null
}
}
interface EmailService {
String sayHello();
}
@Component
class EmailServiceImpl implements EmailService {
public String sayHello() {
return "Hello";
}
}
这里是 spring-config.xml
:
<bean id="emailService" class="com.email.EmailServiceImpl"/>
<context:annotation-config/>
<context:component-scan base-package="com.email"/>
我声明了指向 EmailServiceImpl
class 的 emailService
bean,为什么我在 emailService
中得到 null
?
注释无效,因为该字段是 static
。改成
@Autowired
private EmailService emailService;
问题是您试图通过自动装配设置的字段被声明为静态的。从设计的角度来看,在静态字段上使用依赖注入确实没有意义,但如果必须,可以使用 setter 方法。
@Autowired
void setEmailService (EmailService emailService) {
Tester.emailService = emailService;
}