spring注入静态对象属性时,因为虚拟机类加载问题,直接在属性上使用@Autowired 是不可以的。需要在属性对应的set方法上@Autowired,并且,set方法不能定义为static。
1.创建静态对象属性对应的类
package com.bluej.springj.service.impl;import org.springframework.stereotype.Service;import com.bluej.springj.service.LogService;@Service("logService")
public class LogServiceImpl implements LogService { public void doLog() {
System.out.println("LogServiceImpl.doLog"); }}
LogService类代码
2.创建spring使用的对象
package com.bluej.springj.service.impl; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.bluej.springj.service.CheckService;
import com.bluej.springj.service.LogService; @Service("checkService")
public class CheckServiceImpl implements CheckService { private static LogService logService; public boolean doCheck(Object obj) {
System.out.println("CheckServiceImpl.doCheck");
logService.doLog();
return false;
} @Autowired
public void setLogService(LogService logService) {
CheckServiceImpl.logService = logService;
}
}
CheckServiceImpl 类
3.调用示例
package com.bluej.springj.start; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bluej.springj.service.CheckService; public class Main {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
CheckService checkService = applicationContext.getBean("checkService", CheckService.class);
checkService.doCheck(new Object());
}
}
Main类
4.代码地址
git地址:https://git.oschina.net/blue_phantom/ssmj.git
项目名称:springj
包位置:package com.bluej.springj.start
执行测试类:Main.java