Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
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项目地址
- gitee: https://gitee.com/noear/solon
- github: https://github.com/noear/solon
Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330的更多相关文章
- Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon Ioc 的注解对比Spring及JSR330
注解对比 Solon 1.0.10 Spring JSR 330 @XInject * @Autowired @Inject 字段或参数注入 @XBean * @Component @Named Be ...
- Springboot mini - Solon详解(八)- Solon的缓存框架使用和定制
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- Solon详解(八)- Solon的缓存框架使用和定制
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(九)- 渲染控制之定制统一的接口输出
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(十)- 怎么用 Solon 开发基于 undertow jsp tld 的项目?
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- Solon详解(11)- Mybatis 与 Solon 相亲相爱
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
- SpringBoot Profile使用详解及配置源码解析
在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...
- Springboot mini - Solon详解(三)- Solon的web开发
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
随机推荐
- 02、Spring-HelloWorld
0. 环境准备 1) jar包 jar包我会帮大家准备好的,所以不用担心找不到Jar包 链接:https://pan.baidu.com/s/1JJcYaspK07JL53vU-q-BUQ 提取码: ...
- Spring Cloud配置中心之Consul
Consul不仅可以作为Spring Cloud中服务的注册中心,也可以作为其配置中心,这样一个系统就可以实现服务发现和统一配置,减少系统维护的麻烦,其中在使用Consul作为配置中心使用的过程中可以 ...
- Hibernate初识
1. 持久化框架 狭义的概念:数据存储在物理存储介质不会丢失. 广义的概念:对数据的crud操作都叫持久化. 加载:hibernate的概念,数据从数据库中加载到session. 2. ORM(obj ...
- php(tp5)实现分页效果
public function admin(){ if(request()->isPost()){ //获取第二页的数据传current = 2过来即可 $post['origin'] = in ...
- 《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
说在前面:前几天,公众号不是给大家推送了第二篇关于决策树的文章嘛.阅读过的读者应该会发现,在最后排版已经有点乱套了.真的很抱歉,也不知道咋回事,到了后期Markdown格式文件的内容就解析出现问题了, ...
- 面试阿里,腾讯,字节跳动90%都会被问到的Spring中的循环依赖
前言 Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃 ...
- nginx学习sub_filter模块
用户替换html中的字符 location / { root /opt/app/code/; random_index on; index index.html index.htm; sub_filt ...
- 你知道第一个C语言C++编译器是如何诞生的吗?
当今几乎所有的实用的编译器/解释器(以下统称编译器)都是用 C 语言编写的,有一些语言比如 Clojure,Jython 等是基于 JVM 或者说是用 Java 实现的,IronPython 等是基于 ...
- Pytest学习(十二)-生成HTML报告插件之pytest-html的使用
环境前提 Python3.6+ 安装插件 pip3 install pytest-html -i http://pypi.douban.com/simple/ --trusted-host pypi. ...
- Python实现树莓派摄像头持续录像并传送到主机
关于树莓派,想必从事嵌入式开发的开发者都有听过,树莓派原名为Raspberry Pi,也就是它的英文读法,树莓派诞生于英国,由"Raspberry Pi 基金会"这个慈善组织注册开 ...