当前位置: 代码迷 >> 综合 >> Solon Ioc 的注解对比Spring及JSR330
  详细解决方案

Solon Ioc 的注解对比Spring及JSR330

热度:29   发布时间:2024-02-10 01:34:35.0

注解对比

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;@XInjectUserService 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");@Overridepublic 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> {//...@Overridepublic void onEvent(Configuration configuration) {SqlHelperMybatisPlugin plugin = new SqlHelperMybatisPlugin();//...configuration.addInterceptor(plugin);}    
}
  相关解决方案