Java 在BeanPostProcessor实现中获取bean的注释

Java 在BeanPostProcessor实现中获取bean的注释,java,spring,spring-boot,annotations,Java,Spring,Spring Boot,Annotations,我正在尝试实现我自己的BeanPostProcessor实现 @Component public class UserDetailsProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanc

我正在尝试实现我自己的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的注释,并以某种方式继续它们。我可以清楚地看到为什么
user.getClass().getAnnotations()
不起作用,因为它试图从用户类中获取注释,而不是从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

来获取所有信息,您实际上想对该注释做什么?在本例中,我只想打印字段(
System.out.println(userDetails.firstName());
,System.out.println(userDetails.lastName());),但后来我想在bean中设置这个值。实际上,我只想学习如何使用
beanpstoprocessor
实现自定义注释,为什么不直接在bean方法中设置它们呢?为什么要使用注释?正如我所说,我想学习如何使用
BeanPostProcessor
谢谢。这就是我想要的,再来一个。是否可以获取注释实例,以便将其转换为自定义注释(
UserDetails
)?将类似“beanMethod.getAllAnnotationAttributes()”的内容设置为注释类而不是映射
AnnotatedElementUtils.getMergedAnnotation()
?以及如何获取AnnotatedElement-
AnnotatedElementUtils.getMergedAnnotation()的第一个参数
java.lang.reflect.Method
是一个
注释删除
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)) {
    ...