2014-12-17 4 views
1

У меня есть несколько классов, которые взаимодействуют с базами данных (более одного). Некоторые классы повторно используются так, например, «obs.table1» используется для взаимодействия с таблицей 1 в базе данных «obs», а «ref.table1» используется для взаимодействия с таблицей 1 в базе данных «ref». Эти базы данных находятся на разных URL-адресах, и каждый получает свой собственный пул подключений и т. Д. Obs.table1 и ref.table1 - оба экземпляра MyTable1Class, определенные в файле beans.получение bean id целевого класса в совете

У меня есть pointcut, который перехватывает вызовы методов, аннотированных с помощью @Transactional, или с помощью специальной аннотации @MyTablesAnnotation и настроил его так, чтобы все эти вызовы были перенаправлены в совет @Around.

Это все работает, и поток через совет правильный.

То, что я пытаюсь добавить, сообщает о том, что происходит там. В настоящее время я могу сказать, где я там, но я не могу сказать, был ли объект obs.table1 или ref.table1, который доставил меня туда.

Есть ли способ извлечь идентификатор компонента для объекта, по методу которого был вызван совет?

ProceedingJoinPoint, который передается методу, единственное, что я делаю с ним, это вызвать. Продолжить его, а остальное - просто различные проверки и уловы. Я вижу, что я могу извлечь из него целевой класс или прокси-класс, но ... не знаю, как идти оттуда, чтобы узнать, что такое идентификатор компонента.

Возможно ли это?

ответ

0

Во-первых, это не Рекомендуется зависеть от bean id, поскольку он создает плотную связь с каркасом.

Цитирую docsNote 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.

Класс, для которого вам требуется имя компонента, должен его реализовать, а пружина будет автоматически вводить название компонента. Однако есть информация о том, что вы должны знать и упоминается в документах. here

+1

Подумал, как это использовать, но да, это прекрасно. Я не беспокоюсь о зависимости Spring, поскольку имя компонента используется для отображения в окне «здесь, какая база данных не работает». – Smrtnik

+0

рад, что я мог бы помочь :) –

+0

@Smrtnik не могли бы вы объяснить, как вам удавалось вводить имя боба в совет? –

Смежные вопросы