Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
Solon详解系列文章:
Solon详解(一)- 快速入门
Solon详解(二)- Solon的核心
Solon详解(三)- Solon的web开发
Solon详解(四)- Solon的事务传播机制
Solon详解(五)- Solon扩展机制之Solon Plugin
Solon详解(六)- Solon的校验扩展框架使用与扩展
Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
注解对比
| Solon 1.0.27 | Spring | JSR 330 | |
|---|---|---|---|
| @XInject * | @Autowired | @Inject | 注入Bean(by type) | 
| @XInject("name") | @Qualifier+@Autowired | @Qualifier+@Inject | 注入Bean(by name) | 
| @XInject("${name}") | @Value("${name}") | - | 注入配置 | 
| @XBean * | @Component | @Named | 托管Bean | 
| @XSingleton | @Scope(“singleton”) | @Singleton | 单例(Solon 默认是单例) | 
| @XSingleton(false) | @Scope(“prototype”) | - | 非单例 | 
| @XEvent | - | - | 内部事件订阅 | 
| @XInit * | @PostConstruct | - | 构造完成并注入后的初始化 | 
| @XConfiguration | @Configuration | - | 配置类 | 
| @XController | @Controller,@RestController | - | 控制器类 | 
| @XMapping | @RequestMapping,@GetMapping... | - | 映射 | 
- Solon 的 @XInject 算是: Spring 的@Value、@Autowired、@Qualifier 三者的结合,但又不完全等价
 - Solon 托管的 Bean 初始化顺序:new() - > @XInject - > @XInit -> Method@XBean
 - 注1:Method@XBean,只执行一次(只在 @XConfiguration 里有效)
 - 注2:@XInject 的参数注入,只在Method@XBean上有效
 - 注3:@XInject 的类型注入,只在@XConfiguration类上有效
 
部分用例说明
Solon 强调有节制的注解使用,尤其对于增加处理链路的操会比较节制。
- @XBean(Bean的托管:基于 name 或者 类型;且只记录第一次的注册)
 
@XBean
public class UserService{
    @Db("db1")    //@Db为第三方扩展的注入注解
    BaseMapper<User> mapper;
    UserModel getUser(long puid){
        return db1.selectById(puid);
    }
}
/* @XBean("userService")
public class UserService{
    @Db("db1")
    BaseMapper<User> mapper;
    UserModel getUser(long puid){
        return db1.selectById(puid);
    }
} */
- @XController
 
@XSingleton(false)    //非单例注解
@XController
public class UserController{
    @XInject("${message.notnull}")
    String message;
    @XInject
    UserService userService
    @XMapping("/user/{puid}")
    public Object user(Long puid){
        if(puid == null){
            return message;
        }
        return userService.getUser(puid);
    }
}
- @XConfiguration
 
@XConfiguration
public class Config {
    @XBean("db1")
    public DbContext db1(@XInject("${test.db1}") HikariDataSource dataSource) {
        String schema = XApp.cfg().get("test.db1.schema");
        return new DbContext(schema, dataSource);
    }
}
- @XEvent (使用事件监听时,要确保有人发起事件)
 
//系统异常监听(这个系统会发的,还可以监听不同的异常)
//
@XEvent(Throwable.class)
public class ThrowableListener implements XEventListener<Throwable> {
    WaterLogger log = new WaterLogger("rock_log");
    @Override
    public void onEvent(Throwable err) {
        XContext ctx = XContext.current();
        if (ctx != null) {
            String _in = ONode.stringify(ctx.paramMap());
            log.error(ctx.path(), _in, err);
        }
    }
}
//Bean扩展监听(为Mybatis配置类,添加插件)
//
@XEvent(Configuration.class)
@XConfiguration
public class  SqlHelperMybatisAutoConfiguration implements XEventListener<Configuration> {
    //...
    @Override
    public void onEvent(Configuration configuration) {
       SqlHelperMybatisPlugin plugin = new SqlHelperMybatisPlugin();
       //...
       configuration.addInterceptor(plugin);
    }
}
												
											Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330的更多相关文章
- Springboot mini - Solon详解(七)- Solon Ioc 的注解对比Spring及JSR330
		
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
 - Solon Ioc 的注解对比Spring及JSR330
		
注解对比 Solon 1.0.10 Spring JSR 330 @XInject * @Autowired @Inject 字段或参数注入 @XBean * @Component @Named Be ...
 - 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 mini - Solon详解(八)- Solon的缓存框架使用和定制
		
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
 - Solon详解(三)- Solon的web开发
		
Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...
 - Springboot mini - Solon详解(三)- Solon的web开发
		
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
 
随机推荐
- Vue 自定义VueRouter-简版
			
主要是思路,自己定义组件的时候可以借鉴 Vue-router的 类图 name options: ==> 记录构造函数中传入的对象,在 new VueRouter的时候传了一个对象( route ...
 - 同步博客到cnblogs平台
			
缘由 最最开始在csdn写博客,广告太多,平台暗调资源积分,退:后来使用githubpage+jeklly搭建静态博客,感觉不错,回归到安静的敲打环境.emmmm,由于是静态博客项目,虽能最大化自定义 ...
 - ansibleAPI怎么做异步
			
在直接使用 ansible 时候有-B -p 参数可以启用异步操作,然后返回一个 job_id 值 [root@master ansible]# ansible node1 -B -P -m yum ...
 - Golang笔记整理--One day
			
题外话: 很早就有整理学习笔记的想法,今天将想法付诸于行动,将Golang相关知识系统整理一遍,此分类为Golang学习笔记,最近开始学习这门语言的同学可以参考. 一 第一个Go程序: hello.g ...
 - PhpStorm安装及破解流程
			
下载完以后,把破解的jar包放到bin目录下,更改两个.vmoptions文件 我是安装了一个破解的和汉化包 jet是破解包,resource是汉化包,然后还要修改本地主机地址 例: 0.0.0.0 ...
 - magento 2 cronjob setup
			
crontab -u magento_user -e */5 * * * * php /var/www/html/bin/magento cron:run >> /var/www/html ...
 - 通过自定义资源扩展Kubernetes
			
原文链接:通过自定义资源扩展Kubernetes
 - ubuntu apt 相关命令
			
sudo apt-get update 更新源sudo apt-get install package 安装包sudo apt-get remove package 删除包sudo apt-cach ...
 - python列表的索引与切片
			
<1>.python的列表 索引方式: 例如,list1 = ['张三','男','33','江苏','硕士','已婚',['身高178','体重72']] 1.正向单索引 print(l ...
 - Latex — 写作编译过程中遇到问题记录与总结
			
最近在训练的时候,又开始用Latex进行写作.碰到了很多问题,将问题进行记录与总结. 一.输出中文的问题 由于写作的时候用的是中文,而之前用的是英文,故碰到的第一个问题就是中文的问题.我之前下的是Wi ...