gpt4 book ai didi

Spring简介-IOC

转载 作者:我是一只小鸟 更新时间:2023-03-09 22:31:09 30 4
gpt4 key购买 nike

目录
  • 1、Spring
  • 1.1、简介
  • 1.2、优点
  • 1.3、组成
  • 1.4、扩展
  • 2、IOC理论推导

1、Spring


1.1、简介

  • Spring:春天----------->给软件行业带来了春天! 。

  • 2002,首次推出了Spring框架的雏形:interf21框架! 。

  • Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日发布了1.0正式版.

  • Rod Johnson ,Spring Framework创始人,悉尼大学音乐学博士,计算机学位 。

  • Spring理念:使现有的技术更加容易使用,本身就是一个大杂烩,整合了现有的技术框架! 。

  • SSH: Struct2+Spring +Hibernate.

  • SSM: SpringMvc+Spring+Mybatis! 。

官网: Spring Framework 。

官网下载地址: repo.spring.io 。

GitHub: GitHub - spring-projects/spring-framework: Spring Framework 。

                        
                          <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

ctrl+shift+o 导入

                        
                      

1.2、优点

  • Spring使一个开源的免费的框架(容器)! 。

  • Spring使一个轻量级的、非入侵式的框架! 。

  • 控制反转(IOC),面向切面编程(AOP)! 。

  • 支持事务的处理,对框架整合的支持! 。

总结一句话:Springjiushi+一个轻量级的控制反转(IOC)和面向切面编程的框架.

1.3、组成

1.4、扩展

在Spring的官网有这个介绍:现代化的java开发!说白就是基于Spring的开发! 。

  • Spring Boot
    • 一个快速开发的脚手架
    • 基于SpingBoot可以快速的开发单个微服务
    • 约定大于配置!
  • Spring Cloud
    • SpringCloud式基于SpringBoot实现的

因为现在大多数公司都在使用SpringBoot进行快速开发,学习SpringBoot的前提,需要完全掌握Spring以及SpringMVC!承上启下的作用! 。

弊端:发展了太久之后,违背了原来的理念!配置十分繁琐,人称“ 配置地狱!” 。

2、IOC理论推导


  1. UserDao接口 。

                                
                                  package com.jan.dao;
    
    public interface UserDao {
        void getUser();
    }
    
    
                                
                              
  2. UserDaoImpl实现类 。

                                
                                  package com.jan.dao;
    
    public class UserDaoImpl implements UserDao{
    
        public void getUser() {
            System.out.println("默认获取用户的数据!");
        }
    }
    
    
                                
                              
  3. UserService 业务接口 。

                                
                                  package com.jan.dao.service;
    
    public interface UserService {
        void getUser();
    }
    
    
                                
                              
  4. UserService Impl 业务实现类 。

                                
                                  package com.jan.dao.service;
    
    import com.jan.dao.UserDao;
    import com.jan.dao.UserDaoImpl;
    import com.jan.dao.UserDaoMysqlImpl;
    import com.jan.dao.UserDaoOracleImpl;
    
    public class UserServiceImpl implements UserService{
    
        //增加了 UserDaoMysqlImpl 类,就必须来改变  UserServiceImpl 类 里面的源代码,
        //如是很多类不得累死?解决的办法?
        //private UserDao userDao = new UserDaoImpl();//对象写死了
       // private UserDao userDao = new UserDaoMysqlImpl();//对象写死了
       // private UserDao userDao = new UserDaoOracleImpl();//对象写死了
    
        private UserDao userDao;
    
        //利用set动态实现值的注入!!
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
    
        public void getUser() {
            userDao.getUser();
        }
    }
    
    
                                
                              
  5. 若是有其他新增加的Impl类 。

                                
                                  package com.jan.dao;
    
    public class UserDaoMysqlImpl implements UserDao{
        public void getUser() {
            System.out.println("Mysql获取用户数据!");
        }
    }
    
    
                                
                              
  6. MyTest的实现 。

                                
                                  import com.jan.dao.UserDaoSqlserverImpl;
    import com.jan.dao.service.UserService;
    import com.jan.dao.service.UserServiceImpl;
    
    public class MyTest {
        public static void main(String[] args) {
    
            //用户实际调用的是业务层,dao层它们不需要接触!
            UserService userService = new UserServiceImpl();
    
            ((UserServiceImpl) userService).setUserDao(new UserDaoSqlserverImpl());
    
            userService.getUser();
        }
    }
    
    
                                
                              

在我们之前的业务中,用户的需求可能会影响我们原来的代码,我们需要根据用户的需求去修改原代码!如果程序代码量十分大,修改一次的成本代价十分昂贵! 。

我们使用了一个Set接口实现,已经发生了革命性的变化! 。

                        
                           private UserDao userDao;

//利用set动态实现值的注入!!
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

                        
                      
  • 之前,程序是主动创建对象!控制权在程序猿手上! 。

                                
                                  private UserDao userDao = new 8UserDaoMysqlImpl();//对象写死了
    
                                
                              
  • 使用set注入后,程序不再具有主动性,而是成了被动的接受对象! 。

这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低了,可以更加专注的在业务的实现上!这是IOC的原型! 。

最后此篇关于Spring简介-IOC的文章就讲到这里了,如果你想了解更多关于Spring简介-IOC的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com