网站建设 新闻,最常用免费h5制作平台,清远短视频推广,微信小程序二维码1、如何注入Bean#xff1f;
先了解一下Bean生命周期的简化版#xff1a;
运行构建函数尝试字段注入#xff08;有时同步注入#xff0c;没时订阅注入。不会有相互依赖而卡住的问题#xff09;Init 函数#xff08;是在容器初始化完成后才执行#xff09;…释放#…1、如何注入Bean
先了解一下Bean生命周期的简化版
运行构建函数尝试字段注入有时同步注入没时订阅注入。不会有相互依赖而卡住的问题Init 函数是在容器初始化完成后才执行…释放基本不会发生
了解这个生命过程后可以知道注入的内容在构建函数里是不可用的
Service
public class DemoService{//通过bean type注入注入是异步的不能在构造函数里使用Injectprivate TrackService trackService;//通过bean name注入Inject(userService)private UserService userService;public DemoService(){//注入的Bean不能在构造函数里使用。在生命周期时构建先于注入}Initpublic void init(){//注入的Bean需要进一步做初始化请在处理}
}引用已有 Bean 构建新的 Bean
Configuration
public class DemoConfig{//提示Bean 只能与 Configuration 配合Bean(ds3) public DataSource init(Inject(ds1) DataSource ds1, Inject(ds2) DataSource ds2){MapString, DataSource dsMap new HashMap();dsMap.put(ds1, ds1);dsMap.put(ds2, ds2);DynamicDataSource tmp new DynamicDataSource();tmp.setStrict(true);tmp.setTargetDataSources(dsMap);tmp.setDefaultTargetDataSource(ds1);return tmp;}
}2、如何手动获取Bean
同步获取
public class DemoService{private TrackService trackService;private UserService userService;public DemoService(){//同步方式根据bean type获取Bean如果此时不存在则返回null。需要注意时机trackService Solon.context().getBean(TrackService.class);//同步方式根据bean type获取Bean如果此时不存在自动生成一个Bean并注册返回trackService Solon.context().getBeanOrNew(TrackService.class);//同步方式根据bean name获取Bean如果此时不存在则返回nulluserService Solon.context().getBean(userService);}
}异步获取如果存在会直接回调如果没有目标产生时会通知回调
public class DemoService{private TrackService trackService;private UserService userService;public DemoService(){//异步订阅方式根据bean type获取Bean已存在或产生时会通知回调否则一直不回调Solon.context().getBeanAsync(TrackService.class, bean- {trackService bean;//bean 获取后可以做些后续处理。。。});//异步订阅方式根据bean name获取BeanSolon.context().getBeanAsync(userService, bean- {userService bean;});}
}注入模式是必须要被扫描到的。有时候不方便扫描或者不必扫描那手动模式就是很大的一种自由。
3、获取一批有特征的Bean
通过订阅接口
context.subBeansOfType(DataSource, bean-{//获取所有 DataSource Bean//一般由Component 产生 或者 Configuration Bean 产生
});context.subWarpsOfType(DataSource, bw-{// bw.name() 获取 bean name // bw.get() 获取 bean//一般由Component 产生 或者 Configuration Bean 产生
});通过容器加载完成事件 beanOnloaded 遍历已注册的 Bean
//在 beanOnloaded 事件进进行遍历确保所有 Bean 已处理完成//a. 获取 name share: 开头的 bean //context:AopContext
context.beanOnloaded((ctx) - {ctx.beanForeach((k, v) - {if (k.startsWith(share:)) {render.putVariable(k.split(:)[1], v.raw());}});
});//b. 获取 IJob 类型的 bean //context:AopContext
context.beanOnloaded((ctx) - {ctx.beanForeach((v) - {if (v.raw() instanceof IJob) {JobManager.register(new JobEntity(v.name(), v.raw()));}});
});