SpringMVC:类中的@Autowired未生效(未自动注入)

2016-8-12 diaba Spring

调用时发现标记为@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正常注入了。
 

标签: 自动注入

发表评论:

Powered by emlog 京ICP备15045175号-1 Copyright © 2022