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 }
就像这样,程序耦合度太高,维护成本十分昂贵
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注入就可以实现,使代码发生了革命性的变化,不需要在为了添加新功能而改变程序代码。
使用Ioc降低了程序的耦合度,对象之间不在直接访问,而是交由Ioc容器管理。
总结
以上是Ioc(控制反转)核心思想,将程序控制权从程序员改变为用户本身,实现了一定程度上的解耦。在Spring中Ioc是一个容器,负责管理创建对象和管理对象之间的依赖
Original: https://www.cnblogs.com/qing979/p/13511523.html
Author: 秦鲸卿
Title: Spring核心之Ioc容器
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573198/
转载文章受原作者版权保护。转载请注明原作者出处!