注解对比

Solon 1.0.10 Spring JSR 330
@XInject * @Autowired @Inject 字段或参数注入
@XBean * @Component @Named Bean托管
@XSingleton @Scope(“singleton”) @Singleton 单例(Solon 默认是单例)
@XSingleton(false) @Scope(“prototype”) - 非单例
- @Qualifier @Qualifier,@Named Solon 没有修饰符,XInject和XBean自带name属性
@XInject("${name}") @Value("${name}") - 注入配置
@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时有效

部分用例说明

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 Ioc 的注解对比Spring及JSR330的更多相关文章

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

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

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

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

  3. Solon Web 开发,十四、与Spring、Jsr330的常用注解对比

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  4. (spring-第4回【IoC基础篇】)spring基于注解的配置

    基于XML的bean属性配置:bean的定义信息与bean的实现类是分离的. 基于注解的配置:bean的定义信息是通过在bean实现类上标注注解实现. 也就是说,加了注解,相当于在XML中配置了,一样 ...

  5. Spring IOC的描述和Spring的注解(转)

    Spring常用的注解 本文系转载:转载网址: http://www.cnblogs.com/xdp-gacl/p/3495887.html http://ljhzzyx.blog.163.com/b ...

  6. (转)java之Spring(IOC)注解装配Bean详解

    java之Spring(IOC)注解装配Bean详解   在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看 ...

  7. JSR330的注解和spring的原生注解的比较

    下面的图比较了JSR330和spring的原生注解.其实在大多数场合下他们之间可以互相代替.有可能spring写注解时参考了JSR330的注解:

  8. 七 Spring的IOC的注解方式

    Spring的IOC的注解方式入门 引入注解约束,配置组件扫描 类上的注解: @Conponent  @Controller @Service @Repository 普通属性的注解   @value ...

  9. 谈谈Spring的IoC之注解扫描

    问题   IoC是Inversion of Control的缩写,翻译过来即"控制反转".IoC可以说是Spring的灵魂,想要读懂Spring,必先读懂IoC.不过有时候硬着头皮 ...

随机推荐

  1. CUDA C++ Extensions

    敲代码的时候总是会去CUDA官方文档中找找思路,感觉每次看英文文档都要耗费一点时间来翻译,干脆自己翻译一下便于以后查阅.官方文档:cuda-c-language-extensions 目录 函数修饰符 ...

  2. vue : history模式与项目部署的爬坑

    需求:url不能有#符号,且不放在服务器虚拟主机的根目录. 假设放在虚拟主机的 medicine 文件夹下. 需要改两个文件,一个是 ./config/index.js (vue设置文件) ,另一个是 ...

  3. Github下载文件慢试试这款工具吧

    https://g.widora.cn 可能随时崩溃哦~~暂时还不支持超过 2GB 的仓库,服务器选自日本 vultr 设计思路:通过在日本的 VPS clone -r 代码,下载后压缩成 zip 再 ...

  4. 使样式只在webkit内核生效

    @media screen and (-webkit-min-device-pixel-ratio:0){ .do someting{ } }     使用媒体查询,制定样式

  5. Mybatis(四)多表操作

    数据库如下: 一.创建数据库所对应的bean类 public class User { private Integer uId; private String username; private St ...

  6. List<Activity> lists的关闭finish()

    public class App extends Application { private static List<Activity> lists = new ArrayList< ...

  7. iframe和DataForm

    一.iframe使用 iframe在一个页面中,相当于整个window窗口的子窗口,可通过页面的元素结构查看. <div> <p>学习iframe</p> < ...

  8. Android复习准备

    1. 四大组件是什么? Activity(活动):用于表现功能 Service(服务):后台运行服务,不提供界面呈现 BroadcastReceiver(广播接收器):用来接收广播 ContentPr ...

  9. SpringBoot环境下使用测试类注入Mapper接口报错解决

    当我们在进行开发中难免会要用到测试类,而且测试类要注入Mapper接口,如果测试运行的时候包空指针异常,看看测试类上面的注解是否用对! 正常测试我们需要用到的注解有这些: @SpringBootTes ...

  10. The Google File System(论文阅读笔记)

    概述 ​ GFS:一个可扩展的分布式文件系统,用于大型分布式数据相关应用,TB级的数据,成千上万的并发请求. 设计概览 假设 组件的失效比异常更加常见 多数的文件修改操作是追加数据而不是重写原来的数据 ...