清单
1、BeanDefinitionReaderUtils
registerBeanDefinition-往spring容器注册一个beanDefinition
2、PropertiesLoaderUtils
loadAllProperties-加载配置文件,返回一个Properties
用法如
PropertiesLoaderUtils.loadAllProperties("application.properties", ClassUtils.getDefaultClassLoader());
3、CachingMetadataReaderFactory
getMetadataReader-获得某个类所有元信息,包括类中的注解等信息
4、BeanFactory(如DefaultListableBeanFactory)
getBeanNamesForType-获得某个interface的所有实现类的bean的名称
isTypeMatch-判断bean名称是否和某个类型匹配
registerSingleton-手动创建对象,并交给Spring。
destroySingleton-从Spring中移除某个bean。
getBean-从spring容器中,获得实例。很常用的一个方法
containsLocalBean-根据bean的名称判断bean在Spring中是否存在,用法如下
beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)
5、ReflectionUtils-类反射处理工具
doWithLocalFields-处理当前类中的属性,用法如下:
ReflectionUtils.doWithLocalFields(targetClass, field -> {
MergedAnnotation<?> ann = findAutowiredAnnotation(field);
if (ann != null) {
if (Modifier.isStatic(field.getModifiers())) {
if (logger.isInfoEnabled()) {
logger.info("Autowired annotation is not supported on static fields: " + field);
}
return;
}
boolean required = determineRequiredStatus(ann);
currElements.add(new AutowiredFieldElement(field, required));
}
});
doWithLocalMethods-处理当前类中的方法
其它的方法,请参照此工具类。
6、BeanUtils-bean实例工具
具体见Spring源码
7、AnnotationMetadata
introspect-获得某个类的注解信息,入参是一个class
getAnnotatedMethods-根据某个注解获得注解所标识的方法集合,用法如下:
Set<MethodMetadata> beanMethods = original.getAnnotatedMethods(Bean.class.getName());
getAnnotationAttributes-获得某个注解的所有属性信息,用法如下:
AnnotationAttributes.fromMap(importingClassMetadata.getAnnotationAttributes(BeansScaner.class.getName()));
8、AnnotationConfigUtils
attributesForRepeatable-收集某个类中的某个注解的属性值
attributesFor-通过某个类的注解元数据,获得注解的属性值,代码写法如下
AnnotationAttributes enableAspectJAutoProxy = AnnotationConfigUtils.attributesFor(importingClassMetadata, EnableAspectJAutoProxy.class);
9、SpringFactoriesLoader
loadFactoryNames-加载资源目录下META-INF/spring.factories配置文件,可以实现SPI。注:springboot中就是用到它的。用法如:
SpringFactoriesLoader.loadFactoryNames(GlobalSpiHandler.class, Thread.currentThread().getContextClassLoader());
10、AnnotatedElementUtils
getMergedAnnotationAttributes-获得某个某个方法或属性上的注解的属性信息,用法如下:
AnnotatedElementUtils.getMergedAnnotationAttributes(ao, type); // 其中,ao是Field或Method对象,type是注解类型
findMergedAnnotationAttributes-获得某个某个方法或属性上的注解的属性信息,用法如下:
AnnotatedElementUtils.findMergedAnnotationAttributes(method, Bean.class, false, false);
11、AnnotationUtils
findAnnotation-获得某个类的注解,用法如下:
AnnotationUtils.findAnnotation(clazz, Aspect.class)
getAnnotationAttributes-获得注解的属性,用法如下:
AnnotationUtils.getAnnotationAttributes(annotation);
getAnnotation-获得某个类或方法上的注解对象,用法如下:
AnnotationUtils.getAnnotation(method, Pointcut.class)
// 其中method是Method对象
其它的API可以进入此工具类中,进行查看
12、AopUtils
getMostSpecificMethod-获得最匹配的方法。当如果通过Method拿不到方法上面的注解等信息(例如在Advice方法中,就无法拿到方法上面的注解等信息),就可以先调用此方法拿到Method对象,然后就可以通过 Method 拿到方法上面的注解。用法如下:
Method targetMethod = AopUtils.getMostSpecificMethod(method, targetClass);
isAopProxy-判断一个bean是否被代理过。用法如下:
if (!AopUtils.isAopProxy(bean)) {
bean = super.wrapIfNecessary(bean, beanName, cacheKey);
}
isJdkDynamicProxy-判断一个bean是否是JDK代理出来的。
13、AopContext
currentProxy-获得与当前调用线程绑定的代理对象。前提是Aop代理开关的 exposeProxy 属性的值必须为true才行。
setCurrentProxy-将代理实例与当前调用线程绑定。绑定过程发生在切面的链式调用过程中,如 JdkDynamicAopProxy 的 invoke 方法中。
14、ExposeInvocationInterceptor
currentInvocation-获得与当前调用线程绑定的 methodInvocation。一般是在 @AspectJ 标识的类中的一些 Advice 类的方法。
15、LocalVariableTableParameterNameDiscoverer
getParameterNames-获得某个方法上面的参数名称,用法如下:
public String getKey(String key, Method method,Object[] args) {
String[] parameterNames = new LocalVariableTableParameterNameDiscoverer().getParameterNames(method);
return ElParser.getKey(key,parameterNames,args);
}
16、TransactionSynchronizationManager
getResource-根据当前数据源获得与线程绑定的数据库连接的包装对象 ConnectionHolder
isActualTransactionActive-判断当前事务是否活跃
setCurrentTransactionReadOnly-设置当前事务是否为只读
setCurrentTransactionName-设置当前事务的名称
setCurrentTransactionIsolationLevel-设置事务的隔离级别
setActualTransactionActive-设置事务是否活跃
initSynchronization-初始化事务,实际就是往名称叫synchronizations的ThreadLocal中设置一个空的容器
registerSynchronization-注册一个TransactionSynchronization,实际就是往initSynchronization初始的那个容器当中加一个TransactionSynchronization
其它的api请参考类中的方法
17、ApplicationContext
getBeansWithAnnotation-获得某个注解标识的类
this.applicationContext.getBeansWithAnnotation(RocketMQMessageListener.class)