Обработка пользовательских аннотаций - PullRequest
2 голосов
/ 17 апреля 2011

Можно ли сделать так, чтобы BeanFactoryPostProcessor обнаруживал, есть ли в классах bean-компонентов методы, помеченные пользовательской аннотацией (например, @inject), и продолжает выполнять определенную обработку, если это так?
Если это невозможно, вы можете объяснить, как я могу получить доступ к метаданным bean-компонентов и использовать их в BeanFactoryPostProcessor?
Заранее спасибо.

Редактировать: Я наткнулся на эту ссылку , но не уверен, что это правильное решение, так как я слышал, что использование отражений значительно ухудшает общую производительность приложения.

1 Ответ

1 голос
/ 18 апреля 2011

ConfigurableListableBeanFactory, переданный в вызов метода postProcessBeanFactory (), имеет метод getBeanDefinition (String), из которого можно получить имя класса этого компонента.Отсюда вы можете сделать Class.forName (String) и получить класс, а затем вы можете проверить его членов на наличие аннотации.Конечно, это предложение также использует Java Reflection.

Вы также можете попытаться аннотировать каждый класс, который вы хотите проверить, с помощью собственной пользовательской аннотации.Затем из ConfigurableListableBeanFactory вы можете вызвать getBeansWithAnnotation (Class).Это возвращает карту от beanName к соответствующему экземпляру.

Или вы можете взглянуть на JavaDoc самостоятельно: http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/config/ConfigurableListableBeanFactory.html

...