Solon 强调 有克制的注入 + 手动控制 结合的模式。好处是,代码用料少、启动快。

Bean 的关键生命节点:

节点 说明
1. Constructor(构造方法) 不支持参数注入
2. @Inject(注入) 基于订阅,不确定具体依赖什么时候会被注入
3. @Init(初始化) 在容器扫描完成时执行,所有的依赖注入已完成

下面讲几种基于注入的初始化依赖,以助了解以上特性:

1、基于关系的简单初始化依赖:

  1. @Configuration
  2. public class DsConfig {
  3. @Bean
  4. public DataSource ds(@Inject("${demo.ds1}") HikariDataSource ds){
  5. return ds; //构建数据源bean
  6. }
  7. @Bean
  8. public void init(@Inject DataSource ds){
  9. //初始化结构。数据源bean产生后,才会触发这个函数。从而形成简单的强制依赖关系。
  10. SchemaUtils.init(ds);
  11. }
  12. }

2、基于关系的初始化依赖(反例):

2.1、不适合的场景:

  1. @Component
  2. public void DsHelper{
  3. @Inject
  4. DataSource ds; //注入数据源Bean //提示:@Inject 是异步的。DsHelper 组件生成时,ds 有可能并未完成注入
  5. }
  6. @Configuration
  7. public class DsConfig {
  8. @Bean
  9. public DataSource ds(@Inject("${demo.ds1}") HikariDataSource ds){
  10. return ds; //构建数据源bean
  11. }
  12. @Bean
  13. public void init(@Inject DsHelper helper){
  14. //初始化结构。此时 helper.ds 可能还是 null(因为ds是异步注入的)
  15. SchemaUtils.init(helper.ds);
  16. }
  17. }

2.2、借用顺序的初始化依赖:

上例的“不适合的场景”,可以通过如下改造(但也显复杂和别扭):

  1. @Component
  2. public void DsHelper{
  3. @Inject
  4. DataSource ds; //注入数据源Bean //提示:@Inject 是异步的。DsHelper 组件生成时,ds 有可能并未完成注入
  5. }
  6. @Configuration
  7. public class DsConfig {
  8. @Bean
  9. public DataSource ds(@Inject("${demo.ds1}") HikariDataSource ds){
  10. return ds; //构建数据源bean
  11. }
  12. @Inject
  13. DsHelper helper;
  14. @Init
  15. public void init(){
  16. //初始化结构。此处,所有的Bean注入都已完成
  17. SchemaUtils.init(helper.ds);
  18. }
  19. }

如果结构初始化后,再跟一个数据初始化

  1. @Configuration
  2. public class DataConfig {
  3. @Inject
  4. DsHelper helper;
  5. @Init(index = 1) //默认为自动,也可以手动指定初始化执行顺序
  6. public void init(){
  7. //初始化数据
  8. DataUtils.init(helper.ds);
  9. }
  10. }

注意:这个样例是故意设计出来的,不一定适合生产应用。

Solon2 开发之IoC,四、注入依赖与初始化的更多相关文章

  1. Solon 开发,八、注入依赖与初始化

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  2. JavaEE开发之Spring中的依赖注入与AOP

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...

  3. JavaEE开发之Spring中的依赖注入与AOP编程

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...

  4. Spring注解驱动开发之Ioc容器篇

    前言:现今SpringBoot.SpringCloud技术非常火热,作为Spring之上的框架,他们大量使用到了Spring的一些底层注解.原理,比如@Conditional.@Import.@Ena ...

  5. ios开发之Quartz2D 四:画饼图

    #import "PieView.h" @implementation PieView - (void)drawRect:(CGRect)rect { // Drawing cod ...

  6. web 开发之js---JS变量也要注意初始化

    原先以为js作为弱类型语言,变量的初始化没必要,但是: var text; text+="你好"; alert(text); 对话框弹出的内容是:"undefined你好 ...

  7. JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring-EL表达式

    上篇博客我们聊了<JavaEE开发之Spring中的依赖注入以及AOP>,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和Destroy方法,然后在聊一下 ...

  8. spring IOC中四种依赖注入方式

    在spring ioc中有三种依赖注入,分别是:https://blog.csdn.net/u010800201/article/details/72674420 a.接口注入:b.setter方法注 ...

  9. 转:深入浅出spring IOC中四种依赖注入方式

    转:https://blog.csdn.net/u010800201/article/details/72674420 深入浅出spring IOC中四种依赖注入方式 PS:前三种是我转载的,第四种是 ...

  10. 细数Javascript技术栈中的四种依赖注入

    作为面向对象编程中实现控制反转(Inversion of Control,下文称IoC)最常见的技术手段之一,依赖注入(Dependency Injection,下文称DI)可谓在OOP编程中大行其道 ...

随机推荐

  1. 本地训练,立等可取,30秒音频素材复刻霉霉讲中文音色基于Bert-VITS2V2.0.2

    之前我们使用Bert-VITS2V2.0.2版本对现有的原神数据集进行了本地训练,但如果克隆对象脱离了原神角色,我们就需要自己构建数据集了,事实上,深度学习模型的性能和泛化能力都依托于所使用的数据集的 ...

  2. 每日总结9.20-phoenix的连接

    今天连了phoenix 出现了好多问题,欸 一点点解决,看那个电脑我头都要晕了,jar包和xml文件的问题,总之是解决了 怎么办,我还不会springboot,好多人都学了,我害怕.大家怎么都这么努力 ...

  3. idea测试类没有运行按钮,右键没有Run、Debug

    问题 原因 编写测试类错误 解决办法 选择合适的路径

  4. Alist手动安装并使用教程

    一.官方文档及下载地址 1.官方文档 AList文档 2.下载地址 alist · GitHub 二.下载并解压文件 以Windows为例,下载指定版本的文件. 三.运行 1.解压文件并进入文件夹: ...

  5. 探秘扫雷游戏的C语言实现

    1 引言 1.1 为什么写这篇文章? 项目仓库地址:基于 C 语言实现的扫雷游戏 我决定写这篇文章的初衷是想分享我在使用C语言开发扫雷游戏的经验和心得.通过这篇文章,我希望能够向读者展示我是如何利用C ...

  6. 蓝桥杯-最短路 (SPFA算法学习)

    SPFA算法主要用来解决存在负边权的单源最短路情况(但不能有负环!!!)一个简单的方法判断是否有没有负环可以通过判断是否有一个节点是否频繁进出队列. 以下内容转自https://blog.csdn.n ...

  7. DHorse v1.5.0 发布,基于 k8s 的发布平台

    版本说明 新增特性 支持同一机器部署多个DHorse服务: 支持Next..NET应用部署: 优化Node.Nuxt应用构建和部署的性能: 默认使用fabric8客户端与k8s集群交互,可以通过指定参 ...

  8. 【Android】深入Binder拦截

    ☞ Github ☜ ☞ Gitee ☜ 说明 Binder作为Android系统跨进程通信的核心机制.网上也有很多深度讲解该机制的文章,如: Android跨进程通信详解Binder机制原理 And ...

  9. JVM学习-程序编译与优化

    原文链接:https://gaoyubo.cn/blogs/89d6d9be.html 一.前端编译与优化 Java技术下讨论"编译期"需要结合具体上下文语境,因为它可能存在很多种 ...

  10. 文心一言 VS 讯飞星火 VS chatgpt (29)-- 算法导论5.2 1题

    一.在 HIRE-ASSISTANT 中,假设应聘者以随机顺序出现,你正好雇用一次的概率是多少?正好雇用 n 次的概率是多少? 文心一言: 讯飞星火: 华为盘古: 在HIRE-ASSISTANT中,假 ...