Spring核心之Ioc容器

spring框架

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

起源

为了解决企业应用开发的复杂性,悉尼大学 音乐学博士Rod Johnson开发了Spring Framework

Ioc

如果此时我们有一个需求是获取用户的数据,按照三层架构代码如下

1 //UserDao接口
2 public interface UserDao {
3     void query();
4 }
1 //UserDao接口其中的一个实现类
2 public class MysqlUserDao implements UserDao {
3     @Override
4     public void query() {
5         System.out.println("使用Mysql数据库查询用户");
6     }
7 }
1 //业务层接口
2 public interface Userservice {
3     void query();
4 }
1 //业务层实现类
2 public class UserserviceImpl implements Userservice {
3     private UserDao userDao = new MysqlUserDao();
4     @Override
5     public void query() {
6         userDao.query();
7     }
8 }
1 //用户调用业务层代码
2 public static void main(String[] args) {
3     Userservice userservice = new UserserviceImpl();
4     userservice.query();
5 }

此时只有一个业务方法的话这样写没有什么问题,但是如果在添加一个Oracle实现类,则必然需要修改业务层代码

1 //Oracle数据库实现类
2 public class OracleUserDao implements UserDao {
3     @Override
4     public void query() {
5         System.out.println("使用Oracle数据库查询用户");
6     }
7 }

Spring核心之Ioc容器

就像这样,程序耦合度太高,维护成本十分昂贵

private UserDao userDao =new MysqlUserDao(); 需修改为 private UserDao userDao = new OracleUserDao();

如果在添加一个又要修改实例化对象,添加多少次程序员就需修改多少次代码

此时代码的控制权在程序员手上,改动代码需程序员修改对象实例化

解决方案:在业务层上不在实例化对象,而是给Dao接口一个set方法, 此时程序控制权不在程序员而在用户本身,用户需要使用那种方法就可以直接set注入,不在需要程序员改动代码。

1    private UserDao userDao ;
2     public void setUserDao(UserDao userDao) {
3         this.userDao = userDao;
4     }
1     //用户调用业务层代码
2     public static void main(String[] args) {
3         /*Userservice userservice = new UserserviceImpl();
4         userservice.query();*/
5         Userservice userservice = new UserserviceImpl();
6         ((UserserviceImpl)userservice).setUserDao(new OracleUserDao());
7         userservice.query();
8     }

现在业务层想使用哪个类用户自己set注入就可以实现,使代码发生了革命性的变化,不需要在为了添加新功能而改变程序代码。

Spring核心之Ioc容器

使用Ioc降低了程序的耦合度,对象之间不在直接访问,而是交由Ioc容器管理。

总结

以上是Ioc(控制反转)核心思想,将程序控制权从程序员改变为用户本身,实现了一定程度上的解耦。在Spring中Ioc是一个容器,负责管理创建对象和管理对象之间的依赖

Original: https://www.cnblogs.com/qing979/p/13511523.html
Author: 秦鲸卿
Title: Spring核心之Ioc容器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573198/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球