NutzCN Logo
问答 Main函数里面如何向Module中的@IocBean(fields={"dao"})传Dao对象
发布于 3100天前 作者 qq_2b75f51a 2826 次浏览 复制 上一个帖子 下一个帖子
标签:

Main函数里面如何向Module中的@IocBean(fields={"dao"})传Dao对象

Main函数代码如下:

@IocBy(type=ComboIocProvider.class,args={"*org.nutz.ioc.loader.json.JsonLoader","ioc/",
	  "*org.nutz.ioc.loader.annotation.AnnotationIocLoader","tv.xingbo"})
@Encoding(input="utf8",output="utf8")
@Modules(scanPackage=true)
public class MainModule {
	
	public static void main(String[] params){
		Ioc ioc = new NutIoc(new JsonLoader("ioc.js"));
		System.out.println(ioc);
		UserModule userModule = new UserModule();
		List<User> list = userModule.allLive();
		
		for(int i = 0; i < list.size() ; i++){
			User u = list.get(i);
			System.out.println("User : id " + u.getId() + ", nick: " + u.getNick());
		}
	}
	
}

Module代码如下

@At("/User")
@IocBean(fields={"dao"})
public class UserModule extends EntityService<User>{
	
	public List<User> allLive(){
		List<User> list = dao().query(User.class, 
				Cnd.where("livestatus", "=", "1").and("liveforbid", "=", "0"));
		
		return list;
	}
}

Run的时候报空指针了,我觉得是Dao空指针了,报错内容如下:

2016-05-27 20:32:40,643 [main] DEBUG org.nutz.ioc.loader.json.JsonLoader - Loaded 2 bean define from path=[ioc/dao.js]
org.nutz.ioc.impl.NutIoc@5311a775
2016-05-27 20:32:40,669 [main] DEBUG org.nutz.service.EntityService - Get TypeParams for self : tv.xingbo.bean.User
Exception in thread "main" java.lang.NullPointerException
	at tv.xingbo.module.UserModule.allLive(UserModule.java:28)
	at tv.xingbo.MainModule.main(MainModule.java:38)

请问Main函数里面如何向Module中的@IocBean(fields={"dao"})传Dao对象?谢谢

6 回复

这是要做测试?看本站源码中的SimpleTest类。页面底部有链接。

一个类自行new是没有"注入"这种福利。

@wendal 好的,我去看看,多谢

@wendal 意思是我需要将Dao实例通过参数传到方法里面是吧,类似:

/**
	 * 更新或插入对象
	 * @param dao Dao实例
	 * @param list 需要操作的列表
	 * @param field 作为判定依据的属性名称
	 */
	public static <T> void insertOrUpdate(Dao dao, List<T> list, String field) {
		Entity<? extends Object> en = dao.getEntity(list.get(0).getClass());
		MappingField mf = en.getField(field);
		for (T t : list) {
			Object val = mf.getValue(t);
			// 如果对应的属性不为null,且不为0,到数据库检查一下是否存在
			if (val != null && !(val instanceof Number && ((Number)val).intValue() == 0)) {
				// count一下就知道是否存在了
				if (dao.count(t.getClass(), Cnd.where(field, "=", val)) != 0) {
					dao.update(t); // 存在,更新之
					continue;
				}
			}
			dao.insert(t);
		}
	}

@qq_2b75f51a 看里面获取ioc bean的方式

@wendal 不好意思,新手,没找到获取ioc bean的方式,求指导,麻烦您了

还是不明白的话,看其超类,完整定义了如何生成了类似web环境下的ioc容器,而且如何管理其声明周期

添加回复
请先登陆
回到顶部