获取带有指定注解的所有类对象

获取带有指定注解的所有类对象

最近在项目上需要实现一个功能:项目启动的时候需要获取带有指定注解的所有类的类对象,通过类对象去操作类中的方法和属性
一开始也想到了使用反射,自己写的代码有点多,不好扩展,网上一搜,发现有Reflections反射框架,使用起来非常简单
1.引入maven依赖

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.11</version>
</dependency>
public static Set<Class<? extends Object>> getClass(){
  Reflections reflections = new Reflections("类所在包名")//返回带有指定注解的所有类对象
 return reflections.getTypesAnnotatedWith(指定的注解.class);
}
在Spring Boot,如果你想要获取所有标记了特定注解(如@Component、@Service、@Repository等)的,可以利用Spring的ComponentScan和Java注解扫描功能。首先,在配置(通常是Application或Config,添加@EnableAutoConfiguration和@ComponentScan注解指定扫描的包路径: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; // 添加此注解 @SpringBootApplication @ComponentScan("com.example.yourpackage") // 指定需要扫描的包名 public class YourApp { public static void main(String[] args) { SpringApplication.run(YourApp.class, args); } } ``` 然后,你可以通过Spring的BeanFactory来查找带有指定注解的所有bean。下面是一个简单的例子,展示了如何在application context查找带有@Component注解: ```java import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class AnnotationFinder implements ApplicationContextAware { private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public static <T> List<T> getAnnotatedClasses(Class<T> annotationClass) { return context.getBeansWithAnnotation(annotationClass).values(); } // 使用示例:获取所有的@Component public static List<Component> getAllComponents() { return (List<Component>) getAnnotatedClasses(Component.class); } } // 定义Component,假设它是你想获取的对象 @Retention(RetentionPolicy.RUNTIME) @interface Component {} class ActualComponent implements Component {} ``` 在这个例子,`getAnnotatedClasses()`方法会返回一个包含所有标记有`Component`注解的实例列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值