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組成


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理論推導
- UserDao
- UserDaoImp
- UserSevice
- 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-hant/n/255941.html
微信掃一掃
支付寶掃一掃