文章

Spring获取带有指定注解的类的实例

首先创建一个名为TestA的注解,并为其声明一个名为desc的方法作为该注解的一个参数,元注解@Retention 修饰该注解的生命周期,@Target 修饰该注解的使用范围,这里使用ElementType.TYPE表示@TestA只能修饰在类上

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TestA {
    String desc();
}

这里再创建一个类用于被修饰

public class TestClass {
    public String Test(){
        return "hello,world";
    }
}

然后在TestClass 上方使用@TestA注解修饰,记得使用@Component 让Spring加载它到容器中

@TestA(desc = "test")
@Component
public class TestClass {
    public String Test(){
        return "hello,world";
    }
}

接下来就可以在容器中找到它了

@Component
public class ProcessBean {
    // 注入ApplicationContext
    private ApplicationContext applicationContext;

    @Autowired
    public ProcessBean(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    public void process(){
        // 获取带有指定注解的bean
        Map<String, Object> beans = applicationContext.getBeansWithAnnotation(TestA.class);
        for (Object bean : beans.values()) {
            // 获取注解的参数内容
            bean.getClass().getAnnotation(TestA.class).desc();
        }
    }
}
License:  CC BY 4.0