zoukankan      html  css  js  c++  java
  • @Autowired的使用--Spring规范解释,推荐对构造函数进行注释

    在编写代码的时候,使用@Autowired注解是,发现IDE报的一个警告,如下:

    Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies.

    翻译:
    Spring建议,总是在您的bean中使用构造函数建立依赖注入。总是使用断言强制依赖。

    那么是为什么呢?

    我们可以理一下java的基础点,不考虑父类,初始化的顺序

    静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired

    ps.静态变量或静态语句块的初始化顺序是自上到下的顺序,被老大问到了...

    好的,有了上面的铺垫,我们来看看下面的代码。

    复制代码
    @Autowired
    private User user;
    private School school;
    

    public UserServiceImpl(){
    this.school.id = user.getSchoolId();
    }

    复制代码

    由于java先执行构造方法,导致

    this.school = user.getSchool();

    报空指针异常(虽然这个例子正常人都不会这样写...

    解决办法就是使用构造器注入了

    复制代码
    private User user;
    private String schoolId;
    

    @Autowired
    public UserServiceImpl(User user){
    this.user = user;
    this.schoolId = user.getSchoolId();
    }

    复制代码

    而且若是你是个单例的模式(bean没写@scope,默认为单例,

    那么spring还建议你在bean的声明上加final,这个的解析就简单粗暴了。

    因为加上final只会在程序启动的时候初始化一次,并且在程序运行的时候不会再改变。

    官方的建议例子

    复制代码
        private final EnterpriseDbService service;
    

    @Autowired
    public EnterpriseDbController(EnterpriseDbService service) {
    this.service = service;
    }

    复制代码

    原文地址:https://www.cnblogs.com/ydymz/p/9225402.html

  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/jpfss/p/11533573.html
Copyright © 2011-2022 走看看