Spring 注解 new创建对象后失效

来源:互联网 发布:女生用电动牙刷知乎 编辑:程序博客网 时间:2024/06/05 09:49

       遇到这么一个情况,想写一个Util工具类用于记录操作日志,在无法使用static关键字情况下,使用new来创建对象,随后运行一直报异常,

java.lang.NullPointerExceptionat net.wrtrd.adsystem.sql.dao.impl.LogMapperImpl.insertLog(LogMapperImpl.java:16)at net.wrtrd.adsystem.services.LogService.insertLog(LogService.java:25)at net.wrtrd.adsystem.util.LogWriteUtil.saveLogInfo(LogWriteUtil.java:19)at net.wrtrd.adsystem.util.LogWriteUtil.addLogInfo(LogWriteUtil.java:45)at net.wrtrd.adsystem.control.UserManageAction.getUserInfoAllJson(UserManageAction.java:100)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:606)at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(

 很显然是“空指针”异常,经调试发现在刚进入方法时,1.service对象存在,说明注解生效   2.当运行至new创建对象时,service注入的对象消失。

解决:

经查询发现,spring的创建对象步骤在class加载时就已经通过spring容器创建成功了,所以在此时一旦自行New,所有的相应注入即会失败,在使用时就产生了冲突,你既然要我通过spring来自行创建,你又来自行干预,那我肯定就有意见了,然后我就让你报错让你报错让你报错.......   注意,这里并不是说使用了注解以后就不能new,测试结果是,能实例化,并且相应的方法也是可以使用的。但是,实例化后相应Class 相关的注入也就会集体失效,除非你所有步骤都用new的方式,否则它还是会报错。

 至于正确的解决方案,使用了注解,还是老老实实别使用New 二者不可兼得。  


本来是有Class,可以截图,便于形象描述,由于更改代码后,相应的已被删除,另外至于为什么注解无法使用static,原因很简单,static是声明这个属性/方法属于Class所有,是无法实例化的,而注解注入是一个实例化的操作,只是它将这个步骤交由了sprign容器来管理,所以很显然它是无法使用static的。

相应可点击:http://blog.csdn.net/fuyuwei2015/article/details/46314743

注解后还能实例化吗?:http://tieba.baidu.com/p/3620886729



0 1