属性注入、构造注入缺点优点

本文探讨了Spring框架中的属性注入和构造注入的区别,分析了属性注入的优点如启动速度快和代码直观,但也存在可能导致null异常和bean重复的问题。相比之下,构造注入确保了依赖关系的明确顺序,遵循单一职责原则,但测试难度大且可能引发循环依赖。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

因为现在spring在属性注入的时候会提示黄色警告,这个时候如果替换成构造注入就解决问题了,这是为什么呢,这就要考虑他们之间的优势了。


提示:以下是本篇文章正文内容,下面案例可供参考

一、属性注入

class A1 {
    @Autowired
    private ServiceX service;

    ...
}

优势:
1:灵活
2:启动快(避免因复杂的依赖实例化所造成的性能问题)
3:写法直观,便于理解

缺点:
1:在构造方法中 容易出现null的情况,因为:先是UserServiceImpl类利用构造方法得到实例化对象,再进行属性填充(属性注入)。如果这两个相反了就会造成null的异常错误

2:通过@Autowired 注入, 又因为是 ByType 注入, 因此有可能会出现两个相同的类型bean,所以如果不用构造注入就使用 @Resource 跟 @Qualifier注解注入

//2. 基于属性注入的方式, 容易导致Spring 初始化失败
@Autowired
private Person person;

private String company;

public UserServiceImpl(){
    this.company = person.getCompany();
}


//3. 通过@Autowired 注入, 又因为是 ByType 注入, 因此有可能会出现两个相同的类型bean
public interface IUser {
    void say();
}

@Service
public class User1 implements IUser{
    @Override
    public void say() {
    }
}

@Service
public class User2 implements IUser{
    @Override
    public void say() {
    }
}

@Service
public class UserService {

    @Autowired
    private IUser user;
} 

二、构造注入

public Class Student{
	private final Person person;
	public void (Person person){
	this.person = person;
	}
}

优势:
1:可以决定依赖的关系的注入顺序
2:遵循单一性,不可变原则,
3:构造方法注入中只有组建的创建者才能改变组建的依赖关系,更符合高内聚原则。

缺点:
1:比较难测试,测试的时候项目启动比较慢(使用Mock 脱离数据库 和 可以在测试的时候不启动项目)
2:会导致循环依赖(需要弄Lazy注解解决)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值