在建议中获取目标类的bean id

时间:2014-12-17 17:08:23

标签: spring spring-aop

我有几个与数据库交互的类(不止一个)。有些类被重用,例如" obs.table1"用于与数据库中的table1进行交互" obs"而" ref.table1"用于与数据库中的table1进行交互" ref"。这些数据库位于不同的URL,每个都有自己的连接池等... obs.table1和ref.table1都是bean文件中定义的MyTable1Class的实例。

我有一个切入点拦截对使用@Transactional或自定义注释@MyTablesAnnotation注释的方法的调用,并设置它以便将这些调用全部路由到@Around建议。

这一切都有效,通过建议的流程是正确的。

我想要添加的是报告正在发生的事情。目前我可以告诉我在哪里,但我无法判断是否是obs.table1或ref.table1对象让我在那里。

有没有办法提取调用通知的方法对象的bean id?

传递给方法的ProceedingJoinPoint我唯一能做的就是在它上面调用.proceed,剩下的只是各种检查和捕获。我看到我可以从中获取目标类或代理类,但是......不知道如何从那里去了解bean id是什么。

有可能吗?

1 个答案:

答案 0 :(得分:0)

首先,建议依赖bean id,因为它会与框架紧密耦合。

引用docs Note that it is not usually recommended that an object depend on its bean name, as this represents a potentially brittle dependence on external configuration, as well as a possibly unnecessary dependence on a Spring API.

现在回答你的问题是可以通过org.springframework.beans.factory.BeanNameAware获取bean的名称。

您需要bean名称的类应该实现它,spring将自动地神奇地注入bean的名称。但是,您应该注意并且在文档here

中提到了一个问题