相关疑难解决方法(0)

Spring AOP CGLIB代理的字段为空

描述

使用vlcj组件时,自定义组件将作为AOP代理对象null的结果出现.

MediaList类

public class MediaList {
    private libvlc_media_list_t mediaListInstance;
    public MediaList(LibVlc libvlc, libvlc_instance_t instance, libvlc_media_list_t mediaListInstance) {
        this.libvlc = libvlc;
        this.instance = instance;
        createInstance(mediaListInstance);
    }
    private void createInstance(libvlc_media_list_t mediaListInstance) {
        logger.debug("createInstance()");
        if(mediaListInstance == null) {
            mediaListInstance = libvlc.libvlc_media_list_new(instance);
        }
        else {
            libvlc.libvlc_media_list_retain(mediaListInstance);
        }

        this.mediaListInstance = mediaListInstance; // <- assignment
        logger.debug("mediaListInstance={}", mediaListInstance);

        mediaListEventManager = libvlc.libvlc_media_list_event_manager(mediaListInstance);
        logger.debug("mediaListEventManager={}", mediaListEventManager);

        registerEventListener();
    }
    public final libvlc_media_list_t mediaListInstance() {
        return mediaListInstance; // <- proxy object return null, if use aop
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义MediaList类 …

java spring spring-aop cglib

9
推荐指数
1
解决办法
7991
查看次数

spring单例bean字段未填充

我需要一个服务(单身适合)和一些内部字段,比如挂起的线程列表(是的,所有内容都写成线程安全的)问题是如果我@autowire这个bean,字段看起来是空的.调试我看到代理正确绑定到实例(字段 CGLIB$CALLBACK_X与填充的bean正确链接)和填充字段,但它提供的字段为空.

以下几行代码概括了我正在谈论的内容.

@Service
public class myService{

   @Autowired
   private Monitor monitor;

   public List getSomething(){
       return monitor.getList();
   }
}


@Service
public class myStatefulService{

   //This field will be populated for sure by someone before getSomething() is called
   private List list;

   public synchronized List getSomething(){
       return this.list;
   }

   //Called by other services that self inject this bean 
   public synchronized void addToList(Object o){
      this.list.add(o);
   }
}
Run Code Online (Sandbox Code Playgroud)

monitor我得到的getList调用期间调试变量

monitor => instance of correct class
 fields:
   CGLIB$BOUND => true
   CGLIB$CALLBACK_0.advised => proxyFactory …
Run Code Online (Sandbox Code Playgroud)

java spring

2
推荐指数
1
解决办法
3687
查看次数

标签 统计

java ×2

spring ×2

cglib ×1

spring-aop ×1