Spring 注解 new创建对象后失效

原创 2016年08月30日 17:39:14

       遇到这么一个情况,想写一个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



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[转]Spring依赖注入和实例化(new)的差别

Spring依赖注入和实例化(new)的差别。 Sping为什么使用依赖注入而不使用实例化对象的方式? 首先说明一下概念 依赖注入(Dependency of Injection)和...
  • mrli113
  • mrli113
  • 2017年04月26日 11:44
  • 1020

Spring学习笔记——关于Spring注解扫描不能注入new对象问题

这几天Leader让我用工厂模式对部分业务逻辑代码进行重构,过程是痛苦的(这里就不详细说了),结果很甜蜜。下面记录一下我在重构过程中遇到一个问题。 部分代码如下: @service(orderFa...

@resource或@Autowired Service service不能通过spring注入问题

遇到的主要的问题的原因是:Spring注解扫描不能注入new对象例如:@service(orderFactory) public class OrderFactory implements IOrde...

spring学习(五)—通过注解方式创建对象和注入属性

内容来自传智博客学习视频1.使用注解方式时需要的配置文件

Spring学习笔记——关于Spring注解扫描不能注入new对象问题

这几天Leader让我用工厂模式对部分业务逻辑代码进行重构,过程是痛苦的(这里就不详细说了),结果很甜蜜。下面记录一下我在重构过程中遇到一个问题。 部分代码如下:@service(orderFact...

Spring学习笔记(十):@Autowired和new的区别

@Autowired相当于setter,在注入之前,对象已经实例化,是在这个接口注解的时候实例化的; 而new只是实例化一个对象,而且new的对象不能调用注入的其他类 eg: 1、控制器@con...

java 反射调用Service导致Spring注入Dao失效

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

通过反射途径获得的对象如何自动注入spring Bean

框架:spring+struts2 cotroller组件接收请求后,从请求参数中分离出业务代码,在xml配置中获取相应的类名、方法名和参数列表,通过反射途径调用相应的业务模块。 问题是:怎样在反射...
  • gajicat
  • gajicat
  • 2017年03月21日 15:57
  • 2368

JDOM读写XML文件实例

转自:http://www.javaeye.com/topic/170511需要的jar包 jdom.jar下载地址:http://jdom.org1.读取xml文件中的元素a. abc.xml  ...

Elasticsearch安全插件shield的安装和对应Java API编写

Elasticsearch是一个实时分布式搜索和分析引擎。 Shield 时ES的安全插件,它可以拦截所有的向ES的请求,用户必须输入用户名和密码才能继续访问。 废话不多说,直接来干货: 1.安...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring 注解 new创建对象后失效
举报原因:
原因补充:

(最多只允许输入30个字)