映射失败
发生的条件:映射层实现某个接口,并且该接口中必须有方法,此时会导致无法访问该接口。
如题下图所示:
若删除MemberService中的代码,让其成为一个空的接口,则映射可以访问。
原因
由于spring默认,实现了接口的会以jdk代理形式产生代理类,当某个类实现了接口时,会读取接口内的代码,并且丢失了注解,导致没有进入spring容器内,所以访问不到。
若接口内没有代码,则以当前的类作为被代理对象。
ps:这里有一个问题就是,微服务项目里映射写到接口中,feign却可以调用到映射接口。
异步注解Async失效
发生条件:直接访问一个加了异步注解的方法(相当于用当前对象访问)
结果显示调用其他单例的异步方法时启动了新线程,但是调用自己的方法没有异步。
原因
代理产生了一个新的代理对象(不是当前的类,当前代码层面上的类是被代理对象),但是在服务层里直接调用自己,相当于没有让代理对象执行这个方法。
而MemberServiceManage可以异步,是通过spring拿到代理对象去执行的,是从“外部”,而在方法"内部"直接addUser()相当于用被代理对象去调用,而不是代理对象。
参考:每特教育