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. sort(hdu oj 1425)计数排序和快速排序

    Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0 < n,m < 1000000),第二行包含n个各不 ...

  2. linux shell简单快捷方式与通配符(元字符)echo -e文本显示颜色

    1.shell常用快捷方式 ^R 搜索历史命令^D 退出^A 光标移动到命令行最前^E 光标移动到命令行最后^L 清屏^U 光标之前删除^K 光标之后删除^Y 撤销^S 锁屏^Q 解锁 2.多条命令执 ...

  3. Python相比其他计算机语言真的更有优势吗?

    要了解Python相比其他计算机语言,首先要了解Python语言的特点 Python语言的特点 一.简单易学.明确优雅.开发速度快 ①简单易学:与 C 和 Java 比,Python的学习成本和难度曲 ...

  4. HarmonyOS Java UI之StackLayout布局示例

    StackLayout简介 StackLayout意为堆叠布局,用于在屏幕上保留一个区域来显示组件,实现特殊的功能.通常,堆叠布局中只应该放置一个子组件,如果存在多个子组件,则显示最新的组件.这个布局 ...

  5. iOS沙盒文件目录介绍

    1.APP沙盒目录结构简介 首先奉上苹果官方文档: https://developer.apple.com/library/archive/documentation/FileManagement/C ...

  6. SPG-Net: Segmentation Prediction and Guidance Network for Image Inpainting

    SPG-Net: Segmentation Prediction and Guidance Network for Image Inpainting pytorch 引言 利用语义分割获取空洞的边缘信 ...

  7. 05_Content Provider

    Content Provider是内容提供器,与内容(数据)的存取(存储.获取)有关,是Android应用程序的四大组成部分之一,是Android中的跨应用访问数据机制. 数据库在Android当中是 ...

  8. python 网络并发 :理论部分

    1.今日内容大纲 进程的介绍(理论部分) 进程的创建以及分析 获取进程的pid 进程之间的隔离 1.进程的介绍(理论部分) 1.1什么是进程 一个正在被cpu执行的程序就是一个进程,一个程序可以开启多 ...

  9. MySQL 连接为什么挂死了

    声明:本文为博主原创文章,由于已授权部分平台发表该文章(知乎.云社区),可能造成发布时间方面的困扰. 一.背景 近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类问题有 ...

  10. IDEA无法识别src目录

    如图 如此 即可 -------------------------------------------------------------------- 另一种办法是:让IDEA识别出module, ...