Springboot min -Solon 详解系列文章:

Springboot mini - Solon详解(一)- 快速入门

Springboot mini - Solon详解(二)- Solon的核心

Springboot mini - Solon详解(三)- Solon的web开发

Springboot mini - Solon详解(四)- Solon的事务传播机制

Springboot mini - Solon详解(五)- Solon扩展机制之Solon Plugin

Springboot mini - Solon详解(六)- Solon的校验框架使用、定制与扩展

注解对比

Solon Spring JSR 330
@Inject * @Autowired @Inject 注入Bean(by type)
@Inject("name") @Qualifier+@Autowired @Qualifier+@Inject 注入Bean(by name)
@Inject("${name}") @Value("${name}") - 注入配置
@Component @Component @Named 托管组件
@Singleton @Scope(“singleton”) @Singleton 单例(Solon 默认是单例)
@Singleton(false) @Scope(“prototype”) - 非单例
@Init * @PostConstruct - 构造完成并注入后的初始化
@Configuration @Configuration - 配置类
@Bean @Bean 配置组件
@Mapping @RequestMapping,@GetMapping... - 映射
@Controller @Controller,@RestController - 控制器类
@Service @Service - 服务类
@Dao @Dao - 数据访问类
  • Solon 的 @Inject 算是: Spring 的@Value、@Autowired、@Qualifier 三者的结合,但又不完全等价
  • Solon 托管的 Bean 初始化顺序:new() - > @Inject - > @Init
  • 注1:Method@Bean,只执行一次(只在 @Configuration 里有效)
  • 注2:@Inject 的参数注入,只在Method@Bean上有效
  • 注3:@Inject 的类型注入,只在@Configuration类上有效

部分用例说明

Solon 强调有节制的注解使用,尤其对于增加处理链路的操会比较节制。

  • @Component(组件托管:基于 name 或者 类型;且只记录第一次的注册)
@Component
public class UserService{
@Db("db1") //@Db为第三方扩展的注入注解
BaseMapper<User> mapper; UserModel getUser(long puid){
return db1.selectById(puid);
}
} /* @Component("userService")
public class UserService{
@Db("db1")
BaseMapper<User> mapper; UserModel getUser(long puid){
return db1.selectById(puid);
}
} */
  • @Controller
@Singleton(false)    //非单例注解
@Controller
public class UserController{
@Inject("${message.notnull}")
String message; @Inject
UserService userService @Mapping("/user/{puid}")
public Object user(Long puid){
if(puid == null){
return message;
}
return userService.getUser(puid);
}
}
  • @Configuration
@Configuration
public class Config {
@Bean("db1")
public DataSource db1(@Inject("${test.db1}") HikariDataSource ds) {
return ds;
}
} //系统异常监听(这个系统会发的,还可以监听不同的异常)
//
@Configuration
public class ThrowableListener implements EventListener<Throwable> {
WaterLogger log = new WaterLogger("rock_log"); @Override
public void onEvent(Throwable err) {
Context ctx = Context.current(); if (ctx != null) {
String _in = ONode.stringify(ctx.paramMap()); log.error(ctx.path(), _in, err);
}
}
} //Bean扩展监听(为Mybatis配置类,添加插件)
//
@Configuration
public class SqlHelperMybatisAutoConfiguration implements EventListener<Configuration> { //... @Override
public void onEvent(Configuration configuration) {
SqlHelperMybatisPlugin plugin = new SqlHelperMybatisPlugin();
//...
configuration.addInterceptor(plugin);
}
}

附:Solon项目地址

Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330的更多相关文章

  1. Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  2. Solon Ioc 的注解对比Spring及JSR330

    注解对比 Solon 1.0.10 Spring JSR 330 @XInject * @Autowired @Inject 字段或参数注入 @XBean * @Component @Named Be ...

  3. Springboot mini - Solon详解(八)- Solon的缓存框架使用和定制

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  4. Solon详解(八)- Solon的缓存框架使用和定制

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  5. Solon详解(九)- 渲染控制之定制统一的接口输出

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  6. Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  7. Solon详解(11)- Mybatis 与 Solon 相亲相爱

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  8. SpringBoot Profile使用详解及配置源码解析

    在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...

  9. Springboot mini - Solon详解(三)- Solon的web开发

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

随机推荐

  1. a标签禁用

    a标签禁用可以使用CSS3的特性来控制 <a class="disabled">我是a标签</a> a.disabled { pointer-events: ...

  2. NO.A.0004——Git私有服务器部署/makefile方式/本地与Git服务器代码交换

    一.在linux服务器上搭建私有Git服务程序:make编译方式 远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改.GitHub就是一个免费托管开源代码的远程仓库.但是对于某 ...

  3. 二叉堆python实现

    二叉堆是一种完全二叉树,我们可以使用列表来方便存储,也就是说,用列表将树的所有节点存储起来. 如下图,是小根堆方式的二叉堆,假设父节点的下标为p,则他的左孩子下标为2P+1,右孩子下标为2P+2 cl ...

  4. Codeforces375D Tree and Queries

    dsu on tree 题目链接 点我跳转 题目大意 给定一棵 \(n\) 个节点的树,根节点为 \(1\).每个节点上有一个颜色 \(c_i\) \(m\) 次询问. 每次询问给出 \(u\) \( ...

  5. CDR征稿-CorelDRAW征文活动开始啦!

    学习平面设计的小伙伴对CorelDRAW一定不陌生,CorelDRAW和Photoshop.illustrator以及 InDesign是做设计必备的四款工具.如果您是CorelDRAW专家.培训讲师 ...

  6. 巧妙运用Camtasia制作爱豆的动感影集

    对于追星族来说,收集爱豆的图片.视频是日常必做的事情,而对于进阶型的追星族来说,为爱豆自制各种精美的视频.影集等,会让自己追星之路显得更为充实. 我们可以借助Camtasia教程录制软件为爱豆制作各种 ...

  7. 【VUE】3.表单操作

    1. Form组件渲染 1. components -> 新增组件Form.vue <template> <div>表单验证</div> </templ ...

  8. 如何循序渐进、有效地学习JavaScript?

    转载链接:https://www.zhihu.com/question/19713563/answer/23068003 分享一篇 超毛 的一篇文章<如何学习javascript>(原文链 ...

  9. kafka对接Rancher日志

    kafka对接Rancher日志 目录 kafka对接Rancher日志 概述 环境准备 正常对接kafka集群 1.helm添加bitnami库 2.下载 kafka 对应的chart压缩文件 3. ...

  10. 求1-1e11内的素数个数(HDU 5901 Count primes )

    参考链接:https://blog.csdn.net/Dylan_Frank/article/details/54428481 #include <bits/stdc++.h> #defi ...