Solon 开发,二、注入或手动获取Bean

1、如何注入Bean?

先了解一下Bean生命周期的简化版:

  1. 运行构建函数
  2. 尝试字段注入(有时同步注入,没时订阅注入。不会有相互依赖而卡住的问题)
  3. @Init 函数
  4. ...
  5. 释放(基本不会发生)

了解这个生命过程后,可以知道注入的内容,在构建函数里是不可用的:

@Service
public class DemoService{
    
    //通过bean type注入(注入是异步的,不能在构造函数里使用)
    @Inject
    private TrackService trackService;
    
    //通过bean name注入
    @Inject("userService")
    private UserService userService;
    
     public DemoService(){
       //注入的Bean,不能在构造函数里使用。在生命周期时,构建先于注入
    }
    
    @Init
    public void init(){
        //注入的Bean,需要进一步做初始化,请在处理
    }
}

2、如何手动获取Bean?

public class DemoService{
    
    private TrackService trackService;
    private UserService userService;
    
    public DemoService(){
        //同步方式,根据bean type获取Bean(如果此时不存在,则返回null。需要注意时机)
        trackService = Aop.get(TrackService.class);
        
        //同步方式,根据bean type获取Bean(如果此时不存在,自动生成一个Bean并注册+返回)
        trackService = Aop.getOrNew(TrackService.class);
       
        //同步方式,根据bean name获取Bean(如果此时不存在,则返回null)
        userService = Aop.get("userService");
    
        //异步订阅方式,根据bean type获取Bean(已存在或产生时,会通知回调;否则,一直不回调)
        Aop.getAsyn(TrackService.class, bw-> {
            trackService = bw.get();
            
            //bean 获取后,可以做些后续处理。。。
        });
        
        //异步订阅方式,根据bean name获取Bean
        Aop.getAsyn("userService", bw-> {
            userService = bw.get();
        });
    }
}

注入模式是必须要被扫描到的。有时候不方便扫描,或者不必扫描,那手动模式就是很大的一种自由。

posted @ 2022-01-16 18:45  带刺的坐椅  阅读(100)  评论(0编辑  收藏  举报