Solon v2.7.5

八、AppContext(应用上下文接口)

</> markdown

AppContext 是 Solon 框架的核心组件,是 Ioc/Aop 特性实现载体;是热插拨特性的实现基础。//v2.5.3 之前叫:AopContext (已做兼容性过度处理)

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
-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 有效