阅读,spring, springboot时能发现很多的很好的小功能点,如,加载文件、解析类的方法注解、通过class生成bean等等,本文就来整理下这些小功能
1 2 3 4 List<String> configurations = SpringFactoriesLoader.loadFactoryNames( EnableAutoConfiguration.class, getBeanClassLoader()); Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you " + "are using a custom packaging, make sure that file is correct."); return configurations;
加载classPath:application.yml 1 2 Properties properties = PropertiesLoaderUtils.loadProperties(new ClassPathResource("application.yml")) String value = properties.getProperty(String key);
1 2 3 4 5 6 7 加载jar:file:/Users/skyler/.m2/repository/org/springframework/boot/spring-boot/1.5.10.RELEASE/spring-boot-1.5.10.RELEASE.jar!/META-INF/spring.factories 把key=value,value,value转成list<value> Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url)); String factoryClassNames = properties.getProperty(factoryClassName); List<String> result = new ArrayList<String>(); result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));
通过className生成class bean SpringFactoriesLoader class1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 private static <T> T instantiateFactory(String instanceClassName, Class<T> factoryClass, ClassLoader classLoader) { try { Class<?> instanceClass = ClassUtils.forName(instanceClassName, classLoader); if (!factoryClass.isAssignableFrom(instanceClass)) { throw new IllegalArgumentException( "Class [" + instanceClassName + "] is not assignable to [" + factoryClass.getName() + "]"); } Constructor<?> constructor = instanceClass.getDeclaredConstructor(); ReflectionUtils.makeAccessible(constructor); return (T) constructor.newInstance(); } catch (Throwable ex) { throw new IllegalArgumentException("Unable to instantiate factory class: " + factoryClass.getName(), ex); } }
获取一个类中标有指定注解的所有方法 1 2 3 4 5 6 7 8 9 10 11 12 final List<Method> methods = new LinkedList<Method>(); ReflectionUtils.doWithMethods(aspectClass, new ReflectionUtils.MethodCallback() { @Override public void doWith(Method method) throws IllegalArgumentException { // Exclude pointcuts if (AnnotationUtils.getAnnotation(method, Pointcut.class) == null) { methods.add(method); } } }); Collections.sort(methods, METHOD_COMPARATOR); return methods;
java后端开发,to B业务,趋于蓝色的性格,喜欢篮球等