java後端框架排名「java spring框架入門」

Spring

1、簡介

spring理念:是現有的技術更加容易使用,本身是一個大雜燴。

  • SSH:Struct2 + Spring + Hibernate
  • SSM: SpringMVC + Spring + Mybatis

1.1、導入包

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

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

1.2、優點

  • spring是開源的免費的容器。
  • spring是一個輕量級的,非入侵式的。
  • 控制反轉(IOC),面向切面編程 (AOP)。
  • 支持事務處理,對框架整合的支持。

總結:spring是一個輕量級的控制反轉(IOC)和面向切面編程(AOP)的框架。

1.3、Spring組成

6萬字《Spring框架從入門到精通》(建議收藏)
6萬字《Spring框架從入門到精通》(建議收藏)

1.4、拓展

1.Spring Boot 構建一切

1.一個快速開發的腳手架

2.基於SpringBoot可以快速地開發單個微服務

3.約束大於配置!

2.Spring Cloud 協調一切

1.SpringCloud是基於SpringBoot實現的

3.Spring Cloud Data Flow 連接一切

學習SpringBoot的前提,需要完全掌握Spring以及SpringMVC!

2、IOC理論推導

  1. UserDao
  2. UserDaoImp
  3. UserSevice
  4. UserServiceImp

在之前,用戶的需求可能會影響原來的代碼。

2.1、分析實現

新建一個空白的maven項目

分析實現

我們先用我們原來的方式寫一段代碼 .

1、先寫一個UserDao接口

public interface UserDao {
  public   void getUser();
}

2、再去寫Dao的實現類

public class UserDaoImp implements UserDao{
    @Override
    public void getUser() {
        System.out.println("默認獲取用戶的數據");
    }
}

3、然後去寫UserService的接口

public interface UserService {
    public void getUser();
}

4、最後寫Service的實現類

public class UserServiceImp implements UserService{

    private UserDao userDao = new UserDaoImp();

    public void getUser(){
        userDao.getUser();
    }
}

5、測試一下

@Test
public void MyTest(){
    UserService service = new UserServiceImpl();
    service.getUser();
}

這是我們原來的方式 , 一開始大家也都是這麼去寫的對吧 . 那我們現在修改一下 .

把Userdao的實現類增加一個 .

public class UserDaoMysqlImp implements UserDao{
    @Override
    public void getUser() {
        System.out.println("Mysql獲取用戶數據!");
    }
}

緊接着我們要去使用MySql的話 , 我們就需要去service實現類裏面修改對應的實現

public class UserServiceImpl implements UserService {
   private UserDao userDao = new UserDaoMySqlImpl();

   @Override
   public void getUser() {
       userDao.getUser();
  }
}

在假設, 我們再增加一個Userdao的實現類 .

public class UserDaoOracleImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("Oracle獲取用戶數據");
  }
}

那麼我們要使用Oracle , 需要去service實現類裏面修改對應的實現 . 假設我們的這種需求非常大 , 這種方式就根本就不適用了, 甚至反人類對吧 , 每次變動 , 需要修改大量代碼 . 這種設計的耦合性太高了, 牽一髮而動全身 .

那我們如何去解決呢 ?

我們可以在需要用到他的地方 , 不去實現它 , 而是留出一個接口 , 利用set , 我們去代碼里修改一下 .

public class UserServiceImpl implements UserService {
   private UserDao userDao;
// 利用set實現
   public void setUserDao(UserDao userDao) {
       this.userDao = userDao;
  }

   @Override
   public void getUser() {
       userDao.getUser();
  }
}

現在去我們的測試類里 , 進行測試 ;

public class MyTest {
    public static void main(String[] args) {
        //用戶實際調用的是業務層,dao層他們不需要接觸!
        UserServiceImp userService = new UserServiceImp();
        ((UserServiceImp) userService).setUserDao(new UserDaoSqlserviceImp());
        userService.getUser();
    }
}

使用一個set。

   private UserDao userDao;
      //利用set進行動態實現值的注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
  • 之前是主動創建對象,控制權在程序猿手上!
  • 使用set之後,程序不再具有主動性,而是變成了被動接受對象。

這種思想,從本質上解決了問題,我們程序猿不用再去管理對象的創建。系統的耦合性大大降低,可以更加專註在業務的實現上!這是IOC的原型!

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/255941.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-15 12:32
下一篇 2024-12-15 12:32

相關推薦

發表回復

登錄後才能評論