随笔记录
SpringMVC:类中的@Autowired未生效(未自动注入)
2016-8-12 diaba
调用时发现标记为@Autowired的变量是null的,检查了半天,发现类是这样拿到的

 
            Class classType = Class.forName(classPath);
Method method = classType.getDeclaredMethod("triggerPlaceOrderEngine", new Class[]{String.class});
Map map = (Map) method.invoke(classType.newInstance(), dataJson);




问题已经很明显,因为执行时,变量实例是classType.newInstance()出来的,即自己new出来的,

所以该类classType实例中并未经过springmvc的自动注入操作,也即@Autowired并未得到正确解析,

所以解决方法是在该代码所在的类中添加

 
    @Autowired
private ApplicationContext applicationContext;




 

代码,得到springmvc的容器信息,然后在通过容器获得该类的实例

 
Object instance = applicationContext.getBean("tKZJPlaceOrderEngine");




这样更改上述问题代码为:

 
            Object instance = applicationContext.getBean("tKZJPlaceOrderEngine");
;
Class classType = Class.forName(classPath);
Method method = classType.getDeclaredMethod("triggerPlaceOrderEngine", new Class[]{String.class});
Map map = (Map) method.invoke(instance, dataJson);




 

调用的classType类的方法时,该类的
@Autowired

标记的属性非空,被springmvc正常注入了。


 
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容