例如, 需要跳过控制, 紧凑模式, 等等, 下面代码中????应该怎么写?
@At("json:??????")
public User me(@Attr("uid")String uid) {
if (uid == null) return null;
return dao.fetch(User.class, uid);
}
----------------------------------------这不是分割线---------------------
上期答案:
用SetupBy注解和Setup接口
@SetupBy(CmsSetup.class)
class MainModule {
}
示例Setup实现
class CmsSetup implements Setup {
//.... 随意添加变量...
public void init(NutConfig nc) {
Ioc ioc = nc.getIoc(); // 千万别自己new NutIoc
Dao dao = ioc.get(Dao.class);
// 初始化数据库
Daos.createTablesInPackage(dao, "net.wendal.cms.bean", false);
if (dao.count(User.class) == 0) {
// ... add user
}
// 启动计划任务等等
}
public void destroy(NutConfig nc) { // 同样是nc哦,爱干啥干啥
// netty shutdown
// timer shutdown
}
}
其实Setup接口也可以使用注入,只是很少用到,因为NutConfig能拿到任何需要的东西
@SetupBy(value=CmsSetup.class, args="ioc:cmsSetup")
@IocBy(...) // 自行脑补
public class MainModule {
}
@IocBean
public class CmsSetup implements Setup {
@Inject Dao dao;
// 其他方法自行脑补
}
关于Ioc对象的初始化, 就是events中的create事件,发生在对象创建完成之后.
@IocBean(create="init")
class UserService{
@Inject Dao dao;
public void init() { // 必须无参
if (dao.count(User.class)) {
User admin = new User();
admin.setName("root");
admin.setSalt(R.UU16());
admin.setPassword(R.UU16());
encodePws(admin);
dao.insert(admin);
}
}
}