@
xiangyuecn 跟注解没关系。我不知道你的需求是什么才会想到这么膈应人的方法。我提供一个场景不知道符不符合你的需求。
某一个 Service 提供 findByName 方法,findByName 出于某种原因里边有个需求,如果没有查询到某个 Name,那么就创建一条这样的记录,也就是说 findByName 需要调用同 service 下的 create 方法。但是由于通过 this.create 方法,是没有走 spring 的事务增强的,那么很容易导致问题。那么你的解决思路是通过 Spring 的 AopUtils 来获取 this 在 spring 容器中增强过的 bean 。
你的这个想法的确是可以解决你的需求,但是这不是一个好的解决思路。
我更倾向于 findByName 和 create 方法在某一层进行聚合,而不是在 findByName 里调用 create 方法。或者你不想加入聚合层,你可以直接在 Sevice 创建一个新方法 findOrCreat()来聚合这两个 findByName 和 create 方法,然后你在 findOrCreat 上边打上 @
Transactional 注释来控制内部嵌套事务的传播性,方便你更细粒度的处理事务提交和回滚。而且 findByName 能更好的专注于方法名所提供的功能,因为其他人去调用你的 findByName 时他们是不清楚你里边还有调用了 create 方法,玩意他们调用了然后创新了一条新纪录可能也不是他们自己的本意。