五丶自己模拟的Spring中的Scan扫描

mac2025-02-08  12

@Retention(RetentionPolicy.RUNTIME) public @interface Luban { public String value(); } @Luban("bb") public class UserService { public void find(){ System.out.println(this.getClass().getResource("/").getPath()); } /* public void setDao(UserDao dao) { this.dao = dao; }*/ @Test public void test(){ System.out.println(this.getClass().getResource("/").getPath()); } } public class AnnotationConfigApplicationContex { public void scan(String basePackage){ String rootPath = this.getClass().getResource("/").getPath();//这里获得是编译之后classes目录之下 System.out.println(rootPath); //java中匹配一个反斜杠要用四个反斜杠:我们先要表示正则表达式里面的斜杠“\”,然后再用字符串表示出来。而这2个斜杠分别需要一个转义符,这样就成了4个斜杠在正则表达式里面表示一个斜杠。 String basePackagePath =basePackage.replaceAll("\\.","\\\\"); System.out.println(basePackagePath); File file = new File(rootPath+"//"+basePackagePath); System.out.println(rootPath + "//" + basePackagePath); System.out.println("--------"); String[] names = file.list(); for(String name:names){ name = name.replaceAll(".class","");//得到类名。 try { Class clazz = Class.forName(basePackage+"."+name); //判斷是否是屬於@servi@xxxx if(clazz.isAnnotationPresent(Luban.class)){ Luban luban= (Luban)clazz.getAnnotation(Luban.class); System.out.println(luban.value()); System.out.println(clazz.newInstance()); } } catch (Exception e) { e.printStackTrace(); } } } }

最新回复(0)