八、AppContext(应用上下文接口)
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) | 添加构建处理 |
-beanInjectorAdd(anno, injector) | 添加注入处理 |
-beanExtractorAdd(anno, extractor) | 添加提取处理 |
-beanInterceptorAdd(anno, interceptor, index) | 添加拦截处理 |
-beanInterceptorGet(anno) | 获取拦截处理 |
-beanScan(source) | 扫描源下的所有 bean 及对应处理 |
-beanScan(basePackage) | 扫描包下的所有 bean 及对应处理 |
-beanScan(classLoader, basePackage) | 扫描包下的所有 bean 及对应处理 |
-beanMake(clz)->BeanWrap | 制造 bean 及对应处理 |
-beanInject(bean) | 为一个对象注入 |
-beanInject(varH, name) | 尝试变量注入 字段或参数 |
-beanInject(varH, name, autoRefreshed) | 尝试变量注入 字段或参数 |
-beanForeach(action:(name, wrap)->{}) | 遍历bean包装库 |
-beanForeach(action:(wrap)->{}) | 遍历bean包装库 |
-beanFind(action:(name, wrap)->bool)->List[BeanWrap] | 查找bean包装库 |
-beanFind(action:(wrap)->bool)->List[BeanWrap] | 查找bean包装库 |
-beanRegister(beanWrap, name, typed) | 注册 beanWrap |
-lifecycle(lifecycleBean) | 添加生命周期bean(即获得容器的生命事件) |
-lifecycle(index, lifecycleBean) | 添加生命周期bean(即获得容器的生命事件) |
-wrap(type, bean)->BeanWrap | 包装 bean |
-wrap(name, bean)->BeanWrap | 包装 bean |
-wrap(name, type)->BeanWrap | 包装 bean。v3.0 后支持 |
-wrapAndPut(type)->BeanWrap | 包装 bean 并推入容器 |
-wrapAndPut(type, bean)->BeanWrap | 包装 bean 并推入容器 |
-putWrap(name, wrap) | 推入到bean库 |
-putWrap(type, wrap) | 推入到bean库 |
-hasWrap(nameOrType) | 是否有bean包装 |
-getWrap(nameOrType)->BeanWrap | 获取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 |
4、部分接口限制说明
- subBeansOfType、subWrapsOfType,
仅对 @Bean 或 @Component 产生的 Bean 有效。否则需要手动广播