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);
}
}

最新文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解
  2. MATLAB常用字符串函数之二
  3. java几种常见加密算法小试
  4. C#_字符串的操作
  5. 使用SpringAop 验证方法参数是否合法
  6. js兼容各个浏览器的复制功能
  7. windows 和linux 同步api对比
  8. echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮
  9. hihoCoder_二分&amp;#183;归并排序之逆序对
  10. Android ImgView属性
  11. SDK踩坑全纪录
  12. Newtonsoft.Json输出Json时动态忽略属性
  13. 虚拟机桥接模式联网方法,Xshell的连接与使用
  14. 如何高效的学习 TensorFlow 代码?
  15. 【Linux】 源码安装make命令详解,避免踩坑
  16. 2018-2019-2 网络对抗技术 20165301 Exp5 MSF基础应用
  17. wget常见用法
  18. Html模板渲染引擎Hogan
  19. flask BytesIO() 多个文件打包下载 zipfile
  20. cmmusic:小巧而实用的mplayer音乐播放前端

热门文章

  1. C#LeetCode刷题之#28-实现strStr()(Implement strStr())
  2. 深度强化学习:Deep Q-Learning
  3. Promise.then返回的是什么?
  4. 三张图理解JavaScript原型链
  5. DFS【搜索1】
  6. 【MySQL】记一次线上重大事故:二狗子竟然把线上数据库删了!!
  7. 精讲响应式WebClient第5篇-请求超时设置与异常处理
  8. Python | 多线程死锁问题的巧妙解决方法
  9. C++入门记-构造函数和析构函数
  10. 无法登陆网站,nginx漏配置