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

Bean 的关键生命节点:

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

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

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

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

不适合的场景:

@Component
public void DsHelper{
@Inject
DataSource ds; //注入数据源Bean
} @Configuration
public class DsConfig {
@Bean
public DataSource ds(@Inject("${demo.ds1}") HikariDataSource ds){
return ds; //构建数据源bean
} @Bean
public void init(DsHelper helper){
//初始化结构。此时 helper.ds 可能还是 null
SchemaUtils.init(helper.ds);
}
}

2、基于顺序的初始化依赖:

上例,可以通过如下改造:

@Component
public void DsHelper{
@Inject
DataSource ds; //注入数据源Bean
} @Configuration
public class DsConfig {
@Bean
public DataSource ds(@Inject("${demo.ds1}") HikariDataSource ds){
return ds; //构建数据源bean
} @Inject
DsHelper helper; @Init
public void init(){
//初始化结构。此处,所有的Bean注入都已完成
SchemaUtils.init(helper.ds);
}
}

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

@Configuration
public class DataConfig {
@Inject
DsHelper helper; @Init(index = 1) //默认为0
public void init(){
//初始化数据
DataUtils.init(helper.ds);
}
}

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

Solon 开发,八、注入依赖与初始化的更多相关文章

  1. Solon 开发,一、注入或手动获取配置

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

  2. Solon 开发,二、注入或手动获取Bean

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

  3. Solon 开发

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

  4. Solon 开发,三、构建一个Bean的三种方式

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

  5. Solon 开发,四、Bean 扫描的三种方式

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

  6. Solon 开发,五、切面与环绕拦截

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

  7. Solon 开发,六、提取Bean的函数进行定制开发

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

  8. Solon 开发,七、自定义注解开发汇总

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

  9. 轻松理解 Java开发中的依赖注入(DI)和控制反转(IOC)

    前言 关于这个话题, 网上有很多文章,这里, 我希望通过最简单的话语与大家分享. 依赖注入和控制反转两个概念让很多初学这迷惑, 觉得玄之又玄,高深莫测. 这里想先说明两点: 依赖注入和控制反转不是高级 ...

随机推荐

  1. win10 linux ubuntu子系统 使用adb

    条件 本文已经默认你已经在win10系统下成功配置了ubuntu子系统,所以唯一的条件就是windows上的adb 版本和ubuntu子系统的adb版本一致. 方法 怎么来保证adb 版本一致呢?在本 ...

  2. JavaScript扫盲笔记:

    JavaScript学习: JavaScript代码存在形式: -Head中 <script> </script> -文件 <script src='代码所在路径'> ...

  3. Linux的课堂便利脚本

    上课的时,因为教室机总会重新重启,有时候就要重配网卡yum源和下载一些辅助工具,这里写一个脚本省去冗杂的过程 if [[]]可以防止unary operator expected的报错 nmcli d ...

  4. 【LeetCode】557. Reverse Words in a String III 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...

  5. 【LeetCode】783. Minimum Distance Between BST Nodes 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 中序遍历 日期 题目地址:https://leetc ...

  6. 【LeetCode】423. Reconstruct Original Digits from English 解题报告(Python)

    [LeetCode]423. Reconstruct Original Digits from English 解题报告(Python) 标签: LeetCode 题目地址:https://leetc ...

  7. ZYB loves Xor I(hud5269)

    ZYB loves Xor I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  8. Rikka with Graph(hdu5631)

    Rikka with Graph  Accepts: 123  Submissions: 525  Time Limit: 2000/1000 MS (Java/Others)  Memory Lim ...

  9. Mind the Box: $\ell_1$-APGD for Sparse Adversarial Attacks on Image Classifiers

    目录 概 主要内容 Croce F. and Hein M. Mind the box: \(\ell_1\)-APGD for sparse adversarial attacks on image ...

  10. Kernel Methods for Deep Learning

    目录 引 主要内容 与深度学习的联系 实验 Cho Y, Saul L K. Kernel Methods for Deep Learning[C]. neural information proce ...