參考《Spring普通類獲取並調用Spring service方法》,網址:https://blog.csdn.net/jiayi_0803/article/details/68924558
在Spring MVC中,Controller中使用service只需使用注解@Resource/@Autowired就行,但是一般類(即不使用@Controller注解的類)要用到service時,Spring中的Service通過new實例化的對象脫離了Spring容器的管理,獲取不到注解的屬性值,所以會是null,就算調用service的類中有@Component注解加入了Spring容器管理,也還是null.
---------------------
1、創建獲取Spring的工具類SpringUtil
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
//創建獲取Spring的工具類,用於Spring普通類或工具類獲取並調用Spring service對象
public class SpringUtil implements ApplicationContextAware{
private static ApplicationContext appCtx;
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
appCtx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return appCtx;
}
public static Object getBean(String beanName) {
return appCtx.getBean(beanName);
}
}
2、通過用@Service("xxService")在service層聲明service類
@Service("xxService")
public interface xxService {
}
注意不是impl實現類
3、通過@Resource在普通類或工具類中獲取對象並調用service
@Resource
private xxService xxService;// Service接口
//用SpringUtil.getBean("xxService")的形式獲取並調用service
xxService = (xxService) SpringUtil.getBean("xxService");
4、在applicationContext.xml 中聲明該Spring工具類
<!-- Spring工具類 -->
<bean id = "springUtil" name="springUtil" class="com.xx.util.SpringUtil"/>