好吧,我有一个普通类(LovHelper),负责执行一些实用程序任务。当我说普通类是因为 LovHelper.java 没有 @Component、@Service 或 @Repository 注释。
在这个“普通课程”中,我想从 spring 中注入一个 bean,但 bean 总是为空的。看看我的类 LovHelper.java 波纹管:
package br.com.odontonew.helper;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import br.com.odontonew.bean.Lov;
import br.com.odontonew.dao.BasicDAO;
public class LovHelper {
@Autowired
private BasicDAO dao;
private static LovHelper instance;
private LovHelper(){
}
public static LovHelper getInstance(){
if (instance == null)
instance = new LovHelper();
return instance;
}
public Lov getLovByCodigo(Class lovClass, String codigo){
Map<String,Object> map = new HashMap<String,Object>();
map.put("codigo", codigo);
List<Lov> lovs = (List<Lov>)dao.findByQuery("SELECT c FROM "+lovClass.getName()+" c WHERE c.codigo = :codigo", map);
if (lovs.size() == 1)
return lovs.get(0);
else
return null;
}
/*Getters and Setters*/
public BasicDAO getDao() {
return dao;
}
public void setDao(BasicDAO dao) {
this.dao = dao;
}
}
所以,在另一个类中我只是调用:LovHelper.getInstance().getLovByCodigo(param1, param2)。但我总是得到 NullPointerException,因为 LovHelper 中的 bean“dao”是 NULL。
经过一番思考,我决定将我的 LovHelper.java(使用单例模式)更改为用于 Spring 注入的 Bean,然后我添加了 @Component 注释并删除了所有已开发的单例模式。在另一个类中,我注入“lovHelper”并像这样使用:lovHelper.getLovByCodigo(param1,param2)。第二个解决方案工作正常,但第一个不行。
最后,我的疑问是:为什么原始代码(如发布)不起作用。