zoukankan      html  css  js  c++  java
  • 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();
            });
        }
    }
    

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

  • 相关阅读:
    MySQL经典练习题(四)
    MySQL经典练习题(三)
    MySQL经典练习题(二)
    MySQL经典练习题(一)
    MySQL经典练习题-数据准备
    表连接
    子查询
    MySQL中函数分类
    排序
    数据分组
  • 原文地址:https://www.cnblogs.com/noear/p/15810894.html
Copyright © 2011-2022 走看看