注解对比
Solon 1.0.10 |
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时有效
部分用例说明
- @XBean(Bean的托管:一种基于name,一种基于类型;且只记录第一次的注册)
@XBean
public class UserService{
@Db("db1")
BaseMapper<User> mapper;
UserModel getUser(long puid){
return db1.selectById(puid);
}
}
@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
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);
}
}
}
@XEvent(Configuration.class)
@XConfiguration
public class SqlHelperMybatisAutoConfiguration implements XEventListener<Configuration> {
@Override
public void onEvent(Configuration configuration) {
SqlHelperMybatisPlugin plugin = new SqlHelperMybatisPlugin();
configuration.addInterceptor(plugin);
}
}