通过spring自动注入的对象,使用反射调用其方法之后,无法获取返回值

Lyon4j 发布于 2015/10/28 11:17
阅读 4K+
收藏 1

使用了spring + spring mvc 构建项目,在controller 里面, 被调用的 MessageService 接口及其下面的实现类MessageServiceImpl 通过注解 @resource 自动注入到controller

在调用的方法的时候,我使用了反射的方式,获取到messageServiceImpl 中的某个方法并执行,最终执行成功并且获取到返回值通过return 返回(返回类型为String),但是在接收返回值的时候出现空指针异常。

我想请教一下,是不是通过spring注入的对象不能再进行反射操作。

补充:不是在接收的时候出现空指针,是接收的值为null,我确保子类返回了值,但是在反射调用的时候tostring报的空指针。

问题已经解决:



加载中
0
chzhoudy
chzhoudy

确保MessageService 是个实现类,这一点从你impl的命名中可以证实了。

接下来,确保其构造器在初始化的时候是从Spring的容器中获取的,而非new.

Lyon4j
Lyon4j
感谢你的回复,问题已经解决。谢谢
Lyon4j
Lyon4j
MessageService 是个接口,自动注入的是他的子类 MessageServiceImlp ,确定是通过 @resrouce 注入的,不是new出来的,使用的时候没做任何实例化操作
0
渠富林
渠富林

Spring注入的是动态代理的对象,也就是说如果接口中没有定义的方法是不能通过反射来进行调用的

Lyon4j
Lyon4j
感谢你的回复,问题已经解决。是我自己大意了,谢谢
Lyon4j
Lyon4j
因为是执行了方法但是没有拿到返回值的这个问题。
Lyon4j
Lyon4j
接口确定定义了方法,实现类确定实现了接口的所有方法。
0
maradona
maradona
没这个限制,估计是其他问题导致,你给的信息太少
Lyon4j
Lyon4j
感谢你的回复,问题已经得到解决。谢谢
0
冷酷到底cool
冷酷到底cool
没有看懂怎么回事,……求解
HAYATO
HAYATO
回复 @Lyon4j : 万分感谢你的回答~遇到了同样的问题,终于找到原因了。
Lyon4j
Lyon4j
我启用了aspect 切面,用的是环绕的方式,环绕时忘了给方法加返回值,也没有做返回,所以无论如何返回的都是null
0
m
magicmeng
请问你是怎么解决的 我遇到了类似的问题 有联系方式吗 
0
l
loeveol
org.springframework.util.ReflectionUtils

如果需要反射Spring的注入对象,请使用这个工具类,它可反射到动态代理的实际对象。
返回顶部
顶部