NutzCN Logo
问答 Ioc接口注入问题,一直为null
发布于 301天前 作者 wwt124511 252 次浏览 复制 上一个帖子 下一个帖子
标签:

先上代码:

main配置:

@Ok("json:full")//整个应用默认的成功视图

@Fail("jsp:jsp.500")//失败就跳转到/jsp/5500.jsp页面

@Localization(value="msg/", defaultLocalizationKey="zh-CN")

@ChainBy(args= "mvc/nutzbook-mvc-chain.js")//设置每个请求的动作链

@SetupBy(value=MainSetup.class)	//应用启动和关闭时,应该进行的处理。

@IocBy(type=ComboIocProvider.class, args={"*js", "ioc/",//读取ioc/下的js/json配置文件 
        "*anno", "com.gamedata",
        "*tx",	// // 启用内置的事务拦截器 例如: @Aop(TransAop.txREAD_COMMITTED)
        "*quartz"})	//设置ioc容器加载

@Modules(scanPackage=true)	//整个应用有哪些子模块
public class MainModule {
}

接口和接口的实现类:

接口:

package com.gamedata.service;

import java.util.Map;

import org.nutz.ioc.loader.annotation.IocBean;

@IocBean
public interface CompanyPlatformService {

	Map<String, String> findRedisAllCompanyToPlatformMap(String gamedataAllCompanyToPlatformMap);

}

实现类:

@IocBean(name="companyPlatformService")
public class CompanyPlatformServiceImpl implements CompanyPlatformService {
	
	@Inject
    protected Dao dao;

	@Aop({"redis"})

注入代码:

@IocBean(name="protocolAop")
public class ProtocolAop implements MethodInterceptor {
	
	
	@Inject(value="companyPlatformService")
	public CompanyPlatformService companyPlatformService;
	
	@Inject
	public GameCommonConfigService gameCommonConfigService;
	
	
	@Override
	public void filter(InterceptorChain chain) throws Throwable {
		
		NutMap nutMap = (NutMap)chain.getArgs()[0];
		
		if(StringUtils.isEmpty(nutMap)){
			chain.setReturnValue(ResultUtil.faild("请求参数不能为空"));
			return;
		}

@Inject(value="companyPlatformService")
public CompanyPlatformService companyPlatformService;

@Inject
public GameCommonConfigService gameCommonConfigService;

这2个一直注入不进去,一直为null

8 回复

两个同名的iocbean? CompanyPlatformService

是不是在js里面也配了同名的bean?

另外,aop方法拦截器,,一般情况下只应注入ioc容器,其他对象,在filter方法里面,通过ioc容器获取(当然了,用实例变量缓存起来),否则容易依赖关系的死循环

可以参考一下slog插件的做法

@wendal 确实跟你说的一样,是js里面配了同名的bean

哦,那删掉就好了

ps,被aop方法拦截器注入的对象,是不能也不会被aop拦截的。。。

@wendal

@Inject
	public IocLoader iocLoader;

是注入这个吗,但是我在这个类里面没有看到获取容器里面bean的方法,是不是我找错类了

@Inject("refer:$ioc")
Ioc ioc;

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