在spring中,如果同时有构造注入和设值(set)注入,优先使用哪个?

在spring中,如果同时有构造注入和设值(set)注入,优先使用哪个?,第1张

在spring中,如果同时有构造注入和设值(set)注入,优先使用哪个?

同时有构造注入和set注入,那就是类中同时有有参构造和setXXX()方法。
类定义:

public class Injection {
    private String name;
    private Integer age;
    
    public Injection(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
    public Injection(String name) {
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Injection{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}
第一种情况:有参构造注入(全参)+一个set注入

bean.xml

 
        
        
        
    

结果:name值为set注入的值,age为有参构造的值

第二种情况:有参构造注入(非全参)+一个set注入,两个注入同一个属性

        
        
    

结果:name值为set注入的值,age为null

第三种情况:有参构造注入(非全参)+一个set注入,两个注入不同的属性

        
        
    

结果:name值为有参构造注入,age值为set注入

第四种情况:全set注入+有参构造注入(非全参)

        
        
        
    

结果:name值为set注入,age值也为set注入。

“综上所述”

构造注入优先级比set注入高,所以同时存在时并且对同一个属性注入时,最后的值会是set注入的值,因为构造注入的值会被set注入的值覆盖,不是同时注入同一个属性时,则set注入的属性为set注入的值,其他属性为构造注入的值或null(构造也没注入)。
其实也不难理解,毕竟在java类中,创建一个对象不就是先用构造函数嘛。。。。。。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5597388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存