gpt4 book ai didi

java - 在 BeanPostProcessor 实现中获取 bean 的注解

转载 作者:行者123 更新时间:2023-11-29 04:41:10 25 4
gpt4 key购买 nike

我正在尝试实现我自己的 BeanPostProcessor 实现。

@Component
public class UserDetailsProcessor implements BeanPostProcessor {

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof User) {
User user = (User) bean;
List<Annotation> beanAnnotations = Arrays.asList(user.getClass().getAnnotations());
for (Annotation annotation : beanAnnotations) {
UserDetails userDetails = (UserDetails) annotation;
System.out.println(userDetails.firstName());
System.out.println(userDetails.lastName());
}
}

return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}

这是我的 bean 定义:

@SpringBootApplication
public class HelloReactiveApplication {

public static void main(String[] args) {
SpringApplication.run(HelloReactiveApplication.class, args);
}

@Bean
@UserDetails(firstName = "Szymon", lastName = "Nowak")
public User user() {
return new User();
}
}

我正在尝试获取 bean 的注释,并以某种方式处理它们。我可以清楚地看到为什么 user.getClass().getAnnotations() 不起作用,因为它试图从 User 类获取注释,而不是从 bean 定义中获取注释。我怎样才能得到关于 bean 定义的注释列表?

最佳答案

你应该这样做:

BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
BeanDefinition beanDefinition = registry.getBeanDefinition(beanName);
if (beanDefinition instanceof AnnotatedBeanDefinition) {
if (beanDefinition.getSource() instanceof MethodMetadata) {
MethodMetadata beanMethod = (MethodMetadata) beanDefinition.getSource();
String annotationType = UserDetails.class.getName();
if (beanMethod.isAnnotated(annotationType)) {
...

换句话说,即使它是@Bean 方法定义,我们也可以通过它的BeanDefinition 获取所有信息。

关于java - 在 BeanPostProcessor 实现中获取 bean 的注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39105082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com