NutzCN Logo
问答 下午好,问个问提就是在aop的拦截器里注入失败
发布于 484天前 作者 as66708 441 次浏览 复制 上一个帖子 下一个帖子
标签:

我想在aop的拦截器里面写一些信息进数据库,注入service的时候失败,报空指针怎么办

18 回复

参考nutz-plugins-slog项目

那个我不是很看得懂,
看完后,
我理解是把service当做对象属性拿到,
然后判断是否为空,
为空就用ioc,get类赋值给这个属性,
然后利用这个对象属性,调用方法吗?

你要的东西跟slog一样啦, 在slog基础上改嘛

是可以了插入了,功能是实现了,但是我不怎么理解。。。想要点指点。。为什么这样可以。。

就是把service设置成属性对象,再加ioc注入获取类赋值给这个属性,就可以呢?

  if(operatingRecordService==null){
               RecordService = iocs.get(RecordService.class);

刚开始的时候这和方法的ioc参数不知道有什么用现在知道原来是这样用

 public List<? extends MethodInterceptor> makeIt(orecord orecord, Method method, Ioc ioc) 

先把slog跑通?

请问那个这样是什么意思,
为什么这样的话可以获取到注解的值不用的话第二次注解的值获取不到,
请问这个循环使用来做什么的?

 operatingurl = new CharSegment(orecord.operatingurl());
                for (String key : operatingurl.keys()) {
                    System.out.println(key);
                    els.put(key, new El(key));
                }

这不像slog里面的代码,无从解释

这个是slog,想问的是CharSegment 这个是有什么用的,字符分割?
before = new CharSegment(slog.before())为什么这样第二次执行的时候还有值,而this.before =slog.before ();这样的话第二次执行方法时,before的值为空。

 protected CharSegment before;
    protected CharSegment after;
    protected CharSegment error;
    protected boolean async;
    protected Map<String, El> els;
    protected Ioc ioc;

    public SlogAopInterceptor(Ioc ioc, Slog slog, Method method) {
        els = new HashMap<String, El>();
        if (!Strings.isBlank(slog.before())) {
            before = new CharSegment(slog.before());
            for (String key : before.keys()) {
                els.put(key, new El(key));
            }
        }
        if (!Strings.isBlank(slog.after())) {
            after = new CharSegment(slog.after());
            for (String key : after.keys()) {
                els.put(key, new El(key));
            }
        }
        if (!Strings.isBlank(slog.error())) {
            error = new CharSegment(slog.error());
            for (String key : error.keys()) {
                els.put(key, new El(key));
            }
        }
        this.ioc = ioc;
        this.source = method.getDeclaringClass().getName() + "#" + method.getName();
        this.tag = slog.tag();
        Slog _s = method.getDeclaringClass().getAnnotation(Slog.class);
        if (_s != null) {
            this.tag = _s.tag() + "," + this.tag;
        }
        this.async = slog.async();
    }

this.before又不是字符串类型,你说的语句怎么会合法

this.before =slog.before ();

上面的是你自己的代码?拦截器用了单例,导致被覆盖了?

上面是slog的代码,不是我的,
那slog.before()拿到的不是注解里面的before=“xxxx”吗?
我试过把before声明为String 再这样赋值进去

this.before =slog.before ();

这个试过第一次可以有值,可第二次执行值就为空了。。。

你改成String干啥?把slog原封不动跑过没?

功能实现了,只是想知道为什么用CharSegment,作用是什么。。为什么String不可以。。

哪知道你魔改什么,改了属性类型,就涉及一堆代码的修改

那请问CharSegment这个类,是有什么作用呢

字符串模板

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