AppContext 是 Solon 框架的核心组件,是 Ioc/Aop 特性实现载体;是热插拨特性的实现基础。
1、主要用途
2、三种获取方式
方式一:获取全局的(直接拿:Solon.context())
public class DemoClass{
UserService userService;
public void demo(){
Solon.context().getBeanAsync(UserService.class, bean->{
userService = bean;
});
}
}
方式二:获取当前组件的(注入)
@Component
public class DemoComponent{
@Inject
AppContext context;
}
方式三:获取当前插件的(生命周期开始处)
public class DemoPlugin implements Plugin{
@Override
public void start(AppContext context) {
//...
}
}
3、相关接口
接口 | 相关说明 |
-beanBuilderAdd(anno, builder) | 添加构建“注解”处理 |
-beanBuilderAdd(anno, targetClz, builder) | 添加构建“注解”处理(按类型选择处理) |
-beanInjectorAdd(anno, injector) | 添加注入“注解”处理 |
-beanInjectorAdd(anno, targetClz, injector) | 添加注入“注解”处理(按类型选择处理) |
-beanExtractorAdd(anno, extractor) | 添加提取“注解”处理 |
-beanExtractorHas(anno) | 检查提取“注解”处理,是否有? |
-beanInterceptorAdd(anno, interceptor) | 添加拦截“注解”处理 |
-beanInterceptorAdd(anno, interceptor, index) | 添加拦截“注解”处理 |
-beanInterceptorGet(anno) | 获取拦截“注解”处理 |
接口 | 相关说明 |
-beanScan(source) | 扫描源下的所有 bean 及对应处理 |
-beanScan(basePackage) | 扫描包下的所有 bean 及对应处理 |
-beanScan(classLoader, basePackage) | 扫描包下的所有 bean 及对应处理 |
-beanMake(clz)->BeanWrap | 制造 bean 及对应处理 |
接口 | 相关说明 |
-beanInject(bean) | 为一个对象注入 |
-beanInject(varHolder, name) | 尝试变量注入 字段或参数 |
-beanInject(varHolder, name, autoRefreshed) | 尝试变量注入 字段或参数 |
接口 | 相关说明 |
-wrap(type)->BeanWrap | 包装 bean |
-wrap(type, bean)->BeanWrap | 包装 bean |
-wrap(type, bean, typed)->BeanWrap | 包装 bean |
-wrap(name, bean)->BeanWrap | 包装 bean |
-wrap(name, bean, typed)->BeanWrap | 包装 bean |
-wrap(name, type)->BeanWrap | 包装 bean。v3.0 后支持 |
-wrap(name, type, typed)->BeanWrap | 包装 bean。v3.0 后支持 |
-wrapAndPut(type)->BeanWrap | 包装 bean 并推入容器 |
-wrapAndPut(type, bean)->BeanWrap | 包装 bean 并推入容器 |
-wrapAndPut(type, bean, typed)->BeanWrap | 包装 bean 并推入容器 |
-wrapAndPut(name, bean)->BeanWrap | 包装 bean 并推入容器。v3.0 后支持 |
-wrapAndPut(name, bean, typed)->BeanWrap | 包装 bean 并推入容器。v3.0 后支持 |
| |
-putWrap(name, wrap) | 推入到bean库 |
-putWrap(type, wrap) | 推入到bean库 |
| |
-hasWrap(nameOrType) | 是否有bean包装 |
| |
-beanRegister(wrap, name, typed) | 注册 beanWrap(相当于 putWrap 的复杂版) |
-beanDeliver(wrap) | 交付 beanWrap(把特殊接口,转给相关管理器) |
接口 | 相关说明 |
-getWrap(nameOrType)->BeanWrap | 获取bean包装 |
-getWrapsOfType(baseType) | 获取某类型的 Bean 包装 |
-getWrapAsync(nameOrType, callback) | 异步获取bean包装(可实时接收) |
-subWrapsOfType(baseType, callback) | 订阅某类型的 Bean 包装(可实时接收) |
| |
-getBean(name)->Object | 获取 Bean |
-getBean(type)->T | 获取 Bean |
-getBeansOfType(baseType)->List[T] | 获取某类型的 Bean |
-getBeansMapOfType(baseType)->Map[String,T] | 获取某类型带名字的 Bean |
-getBeanOrNew(type) | 获取 Bean,或者新建 |
-getBeanAsync(name, callback) | 异步获取 Bean(可实时接收) |
-getBeanAsync(type, callback) | 异步获取 Bean(可实时接收) |
-subBeansOfType(baseType, callback) | 订阅某类型的 Bean(可实时接收) |
接口 | 相关说明 |
-beanForeach((name, wrap)->{}) | 遍历bean包装库 |
-beanForeach((wrap)->{}) | 遍历bean包装库 |
| |
-beanFind((name, wrap)->bool)->List[BeanWrap] | 查找bean包装库 |
-beanFind((wrap)->bool)->List[BeanWrap] | 查找bean包装库 |
接口 | 相关说明 |
-lifecycle(lifecycleBean) | 添加生命周期bean(即获得容器的生命事件) |
-lifecycle(index, lifecycleBean) | 添加生命周期bean(即获得容器的生命事件) |
4、带与不带 OfType 方法的区别(baseType 与 type 的区别)
带 OfType 的几方法 | 对应的方法(不带 OfType 的) |
getWrapsOfType(baseType)->List[T] | getWrap(type)->T |
subWrapsOfType(baseType, callback) | getWrapAsync(type) |
getBeansOfType(baseType)->List[T] | getBean(type)->T |
subBeansOfType(baseType, callback) . | getBeanAsync(type) |
getBeansMapOfType(baseType) | / |
区别在于参数的不同:
- baseType,表示基类。通过基类匹配获取
一批
;对应的方法都带有 s
,表过多个。
- type,表过本类。通过 hash_code 匹配获得
单个
。
5、部分接口限制说明
- subBeansOfType、subWrapsOfType,
仅对 @Bean 或 @Component 产生的 Bean 有效。否则需要手动广播