//获取到bean serviceBean的类 com.a.DemoService
DemoService serviceBean = (DemoService) SpringContextsUtil.getBean("demoService");
// serviceBean.getClass()就变成代理类型了 class com.sun.proxy.$Proxy27
//所以在代理类型里面找selectSysUserByUserId方法就报错NoSuchMethod
Method mh = ReflectionUtils.findMethod(serviceBean.getClass(), "selectSysUserByUserId",new Class[]{Object.class} );
Object ret = ReflectionUtils.invokeMethod(mh,serviceBean,obj);
要怎么解决,获取spring管理的bean后,取得class还是原来的class
定义了一个service com.a.DemoService
通过工具获取该bean,但是该bean.getClass()与com.a.DemoService不一致,而是个代理,所以没法用发射,怎么解决
你都拿到代理对象了还用反射获取方法干啥,直接拿对象调用方法啊
对,获取代理对象,直接用对象调方法就行
//beanName是动态传入的
Object serviceBean = SpringContextsUtil.getBean(beanName);
Class cz = serviceBean.getClass();
Method mh = ReflectionUtils.findMethod(cz, "selectSysUserByUserId",new Class[]{Object.class} );
Object ret = ReflectionUtils.invokeMethod(mh,serviceBean,obj);
beanName是动态传入的,上面的是是测试写死了
因为事物用的是xml配置方式,所有的service都被代理了,所有缓存注解方式,没有添加事物注解的就是好的
将service的aop事物通知xml配置去掉,把service方法换成注解方式