在Controller中直接使用service可行,而封装成工具类后调用出错,原因在于不能采用new方式加载service,必须将service的加载过程在服务器运行时进行。
这是我当时遇到的问题和最后的解决结论:http://bbs.csdn.net/topics/392162820
这是当时提问的时候有人提供的解决方案文章地址:http://blog.csdn.net/p793049488/article/details/37819121
解决静态工具类中使用注解注入service的重点在于两点:
1、在工具类中声明一个该工具类的静态的内部对象
2、使用注解@PostConstruct把需要使用的service加载到上面定义的静态内部对象中
例如下面的代码,重点就是29—37行代码:
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.shanshan.bo.pojo.SsFundDimBank;
import com.shanshan.bo.pojo.SsFundDimCurrencyType;
import com.shanshan.bo.pojo.SsbiUser;
import com.shanshan.bo.service.SsFundDimBankService;
import com.shanshan.bo.service.SsFundDimCurrencyTypeService;
import com.shanshan.bo.service.SsbiUserService;
@Component
public class DataFactoryUtil {
@Resource
private SsbiUserService userService;
@Resource
private SsFundDimBankService bankService;
@Resource
private SsFundDimCurrencyTypeService currencyTypeService;
private static DataFactoryUtil dataFactoryUtil;
@PostConstruct
public void init() {
dataFactoryUtil = this;
dataFactoryUtil.userService = this.userService;
dataFactoryUtil.bankService = this.bankService;
dataFactoryUtil.currencyTypeService = this.currencyTypeService;
}
/**
* 根据用户名去数据库查询用户并返回
* Ps:暂不考虑用户名重复的问题
* @param username
* @return User
*/
public static SsbiUser selectByUsername(String username) {
if (username != null && !("".equals(username))) {
return dataFactoryUtil.userService.selectByUserCode(username);
}
return null;
}
/**
* 查询所有的银行数据并返回
*/
public static List<SsFundDimBank> selectAllBank() {
return dataFactoryUtil.bankService.selectAll();
}
/**
* 查询所有的币制数据并返回
*/
public static List<SsFundDimCurrencyType> selectAllCurrencyType() {
return dataFactoryUtil.currencyTypeService.selectAll();
}
}