spring 中 pojo 类为什么不需要注入
在思考这个问题之前应该需要知道什么是 IOC 和 DI 。在《Spring5 高级编程》中是这样介绍它们之间的关系的:
IOC 的核心是
DI,旨在提供一种更简单的机制来设置组件依赖项(通常称为对象的协作者),并在整个生命周期中管理这些依赖项。需要某些依赖项的组件通常称为对象,或者在
IOC 的情况下被称为目标对象。通常,IOC 可以分解为两种子类型:依赖注入和依赖查找。这些子类型被进一步分解为 IOC 服务的具体实现。
通过这个定义可以清楚的看到, 当谈论 DI 时,通常是在谈论 IOC,而当谈论 IOC 时,则并不总是在谈论 DI(例如,依赖查找也是
IOC 的一种形式)。
当然,IOC 的概念众说纷纭,因为它太抽象了,而我们只需要理解其中一种概念就足够了。o( ̄▽ ̄)d
回到问题本身,spring 中 pojo 类为什么不需要注入?
首先我们需要知道使用 IOC 的意义在哪,能够满足 OCP(开闭原则,对扩展开放,对修改关闭)
在实际开发中用户的需求是不断变化的,而为了满足用户需求变化的同时不改变原有代码就需要引入 IOC 。
举个例子:现有一个接口 ArticleService ,一个使用 Oracle 数据库的实现类 articleServiceImpl 。现在用户需求变更要求使用 MySQL 数据库,那么怎么解决呢?新建一个使用 MySQL 数据库的实现类 articleServiceImpl2 即可。
对于 service 层类需要注入我们都知道了,那么 pojo 类呢?
什么是 pojo 类?通常就是实体类,有时也会对其封装成 VO 。实体类代表一种实际存在或者依托介质存在的东西,它并不是抽象的。比如 文章,电脑,汽车等等,这些实体类会因为用户的需求变更而改变吗?答案是肯定不会变化。用户需求再怎么变更也改变不了一篇文章,一辆汽车的本质,顶多加一些时间、类型、品牌这些属性。而这些并不考虑在业务的变化范围内,所以并不需用使用 IOC 。
最后就有了我们平时写业务逻辑的代码:
@Resource
private ArticleService articleService; //注入
public void hello(){
Article article = new Article(); //不需要注入
}
ヾ( ̄▽ ̄)Bye~~Bye~