关闭

Spring 注解 new创建对象后失效

标签: Spring 注解 new创建对象后失效spring new后注解失效spring static后注解失效
1599人阅读 评论(0) 收藏 举报

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

java.lang.NullPointerException
	at 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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:83052次
    • 积分:1136
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:25篇
    • 译文:0篇
    • 评论:37条
    最新评论