使用spring中的注解@Autowired,获取到的对象为null

1,407 阅读1分钟
原文链接: blog.csdn.net

最近工作中遇到一个关于@AutoWired注解使用的细节问题,以前没有注意到,现在特意记录一下。

问题描述:在我的一个工具类中,使用@Autowired需要注入一个dao对象,然后工具类的方法中会调用该dao对象中的方法,在运行时发现报空指针异常,dao对象居然是null。

相关代码如下:

工具类代码如下:
/**
 * 对象级的码表转换工具类
 * @author: lsl
 */
public class CodeTransHolderUtils {

       private static Logger logger = LoggerFactory.getLogger(CodeTransHolderUtils.class);

       @Autowired

       ServiceAttrDictDao serviceAttrDictDao;

       public List<ServiceAttrDictBO> qryBySysAndServiceAndMethod(String pcmsSysCode, String serName) {

           return  serviceAttrDictDao.qryBySysAndServiceAndMethod(pcmsSysCode,serName); //这里报空指针异常

      }

}

dao层代码如下:

/**
 * @author: lsl
 */
@Repository("serviceAttrDictDao")
public class ServiceAttrDictDaoImpl implements ServiceAttrDictDao {

}

 分析原因:原来要使用@Autowired注解,那么注解所在类必须交给spring容器管理。即我的CodeTransHolderUtils这个类必须在xml文件中配置或者加@Component、@Service等注解交给spring。

解决办法:由于我的是这个类是工具类,不需要交给spring管理(当然也可以交个spring管理),需要通过代码获得该dao对象。

代码如下:

/**
 * @author: lsl
 */
public class CodeTransHolderUtils {

    private static Logger logger = LoggerFactory.getLogger(CodeTransHolderUtils.class);

//    @Autowired
//    ServiceAttrDictDao serviceAttrDictDao;
    
    //SpringContextHolder是我们内部一个工具类,作用是从ApplicationContext中获取bean
    public ServiceAttrDictDao getServiceAttrDictDao(){
        return (ServiceAttrDictDao)SpringContextHolder.getBean("serviceAttrDictDao");
    }
  public  List<ServiceAttrDictBO> qryBySysAndServiceAndMethod(String pcmsSysCode, String serName) {
    
     return getServiceAttrDictDao().qryBySysAndServiceAndMethod(pcmsSysCode,serName);
    
  }

}