Spring學習筆記(一)
Spring
1.1、簡介
-
Spring:翻譯為:春天------> 可以理解為是給軟體行業帶來了春天
-
範圍:任何 Java 應用
-
目的:解決企業級伺服器的開發
-
歷史
- 2002 ,首次推出 Spring框架的雛形 Interface21框架
- 2004年3月24號 ,正式釋出 Spring 1.0
- Rod Johnson Spring Framework創始人。悉尼大學音樂學博士
- **Spring 的理念:**使現有的技術更加容易使用,本身是一個大雜燴,整合了現有的技術框架!
-
SSH:Struct2 + Spring + Hibernate !
-
SSM:SpringMVC + Spring + Mybatis !
官網:https://spring.io/projects/spring-framework#learn
官方下載地址:https://repo.spring.io/release/org/springframework/spring/
GITHUB:https://github.com/spring-projects/spring-framework
Maven:https://mvnrepository.com/artifact/org.springframework/spring-webmvc/5.2.8.RELEASE
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
1.2、優點
- Spring 是一個開源的免費的框架(容器)!
- Spring 是一個輕量級的,非入侵式的框架 !
- 控制反轉(IOC)、面向切面程式設計(AOP)
- 支援事務的處理,對其他框架整合支援。
- 事務:對一系列資料庫統一的提交和回滾
總結:Spring 就是一個 輕量級的控制反轉(IOC) 和 面向切面程式設計(AOP) 的框架!
1.3、組成
1.4、
現代化的 Java 開發
- Spring Boot
- 快速開發的腳手架
- 基於springboot可以快速開發單個微服務
- 使 ==> 約定大於配置
- Spring Cloud
- Spring Cloud 是基於Spring Boot實現的。
現在大多數公司都在使用 Springboot 進行快速開發,學習SpringBoot的前提,需要完全掌握Spring 及 SpringMVC!!(承上啟下的作用!)
弊端:發展了太久之後,違背了原來的理念!配置十分繁瑣,人稱:“配置地獄”。
2、IOC理論推導
在我們之前的業務中,使用者需求可能會影響我們原來的程式碼,我們需要根據使用者的需求就行修改原始碼!如果程式的程式碼量非常大,修改一次程式碼的代價是否昂貴!
我們使用一個Set介面實現。
// private UserDao userDao = new UserDaoImpl();
private UserDao userDao;
// 利用set 進行動態實現值的注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
- 之前,程式是主動建立物件的:
UserDao userDao = new UserDaoImpl();
- 使用
Set
注入後,程式不再具有主動性,而是程式設計了被動的接收物件。(使用者需要用到什麼我們就傳入到 set 什麼,少了可以在進行建立新的。)
這種思想,從本質上解決了問題,我們不用再去管理物件的建立了。系統的耦合性大大的降低,可以更加專注在業務的實現上。這是 IOC 的原型!
IOC本質
控制反轉IoC(Inversion of Control),是一種設計思想,DI(依賴注入)是實現IoC的一種方法,也有人認為DI只是IoC的另一種說法。沒有IoC的程式中 , 我們使用物件導向程式設計 , 物件的建立與物件間的依賴關係完全硬編碼(完全寫死的)在程式中,物件的建立由程式自己控制,控制反轉後將物件的建立轉移給第三方,個人認為所謂控制反轉就是:獲得依賴物件的方式反轉了。
IoC是Spring框架的核心內容,使用多種方式完美的實現了IoC,可以使用XML配置,也可以使用註解,新版本的Spring也可以零配置實現IoC。
Spring容器在初始化時先讀取配置檔案,根據配置檔案或後設資料建立與組織物件存入容器中,程式使用時再從Ioc容器中取出需要的物件。
採用XML方式配置Bean的時候,Bean的定義資訊是和實現分離的,而採用註解的方式可以把兩者合為一體,Bean的定義資訊直接以註解的形式定義在實現類中,從而達到了零配置的目的。
控制反轉是一種通過描述(XML或註解)並通過第三方去生產或獲取特定物件的方式。在Spring中實現控制反轉的是IoC容器,其實現方法是依賴注入(Dependency Injection,DI)。
3、HelloSpring
實體類
public class Hello {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 使用 spring 來建立物件。在spring中都成文bean
bean = 物件 new Hello()
id = 變數名
class = new 的物件
property 相當於給物件中的屬性設定一個值
-->
<bean id="hello" class="com.lsw.pojo.Hello">
<property name="str" value="Spring"/>
</bean>
</beans>
- bean => 物件 new Hello() ——>進行物件的託管
- id => 變數名/物件名
- class => new 的class物件
- property => 相當於給物件中的屬性設定一個值
- name:屬性名
- ref 是引用 Spring 容器中建立好的物件
- value 是具體建立的值,基本資料型別!
這個過程稱為 控制反轉
控制:誰來控制物件的建立,傳統的應用程式的物件是由程式本身控制建立的,使用Spring後,物件是由Spring來建立的。
反轉:程式本身不建立物件,而變成被動的接收物件。
依賴注入:就是利用 Set 的方法來進行注入【必須要有set方法】。
IOC 是一種程式設計思想,由主動的程式設計程式設計 被動的接收
可以通過該 newClassPathXmlApplicationContext 去瀏覽一下底層的原始碼。
到現在,我們可以不用在程式中去改動了,要實現不同的操作,只需要在xml配置檔案中進行修改,所謂的IOC ,一句話就是 物件由Spring建立,管理,裝配!
測試類
public class MyTest {
public static void main(String[] args) {
// 獲取spring 的上下文物件!
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 我們的物件都在 Spring中管理,我要使用,直接去裡面取出來就可以了。
// get我們需要的bean的id,強轉成我們需要的物件
Hello hello = (Hello) context.getBean("hello");
System.out.printf( hello.toString());
}
}
例項化容器
獲取 spring 的上下文物件。**Spring 例項化容器就相當於 “婚介網站” **
我們的物件都在 Spring 中管理,我要使用,直接去beans.xml
裡面取出來就可以了。
getBean 取出我們需要的bean,通過 bean 的 id 進行標記,強轉成我們需要的物件
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
提供給ApplicationContext
建構函式的一個或多個位置路徑是資源字串,可讓容器從各種外部資源(例如本地檔案系統,Java等)載入配置後設資料CLASSPATH
。
例項化的時候會把裡面的所有物件都建立出來
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="UserMysqlImpl" class="com.lsw.dao.UserMysqlImpl"/>
<bean id="UserOracleImpl" class="com.lsw.dao.UserOracleImpl"/>
<bean id="UserServiceImpl" class="com.lsw.service.UserServiceImpl">
<property name="userDao" ref="UserMysqlImpl"/>
</bean>
</beans>
總結
- 所有的類都需要裝備到 Bean 中
- 所有的Bean 都需要容器去取
- 容器中取得的 Bean 就是一個物件
4、IOC建立物件的方式
使用無參構造方法建立物件(預設)
public User() {
System.out.println("User 的無參構造方法。");
}
<bean id="user" class="com.lsw.pojo.User">
<property name="name" value="時傾"/>
</bean>
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// get我們需要的bean的id,強轉成我們需要的物件
User user = (User) context.getBean("user");
user.show();
}
使用有參構造方法建立物件
public User(String name) {
this.name = name;
}
1.引數下標賦值
<!-- 第一種方式,下標賦值 -->
<bean id="user" class="com.lsw.pojo.User">
<constructor-arg index="0" value="盧大大"/>
</bean>
2.型別匹配
不建議使用
<bean id="user" class="com.lsw.pojo.User">
<constructor-arg type="java.lang.String" value="asdf..."/>
</bean>
3.直接通過引數名
<bean id="user" class="com.lsw.pojo.User">
<constructor-arg type="name" value="asdf..."/>
</bean>
總結:
在配置檔案 beans.xml 載入的時候,例項化容器中的物件都已經被全部建立初始化出來了
無論是不是用,都會初始化容器裡面的東西。
相關文章
- Java Spring Boot 學習筆記(一)JavaSpring Boot筆記
- spring學習筆記Spring筆記
- Spring 學習筆記Spring筆記
- 第一個完整的spring查詢功能學習筆記【Spring工程學習筆記(二)】Spring筆記
- springcloud學習筆記(一)Spring Cloud EurekaSpringGCCloud筆記
- spring學習筆記(1)Spring筆記
- Spring 學習筆記(2) Spring BeanSpring筆記Bean
- Spring 學習筆記(3)Spring MVCSpring筆記MVC
- spring-5學習筆記Spring筆記
- Spring MVC學習筆記二SpringMVC筆記
- Spring框架學習筆記(1)Spring框架筆記
- Spring學習筆記目錄Spring筆記
- Spring Security Filter 學習筆記SpringFilter筆記
- Spring 事務學習筆記(一) 初遇篇Spring筆記
- Spring Boot學習筆記:Spring Boot核心配置Spring Boot筆記
- Spring Boot 學習筆記(3):MyBatisSpring Boot筆記MyBatis
- Spring Boot 學習筆記(2):JDBCSpring Boot筆記JDBC
- Spring boot + Zookeeper + Dubbo學習筆記Springboot筆記
- 學習筆記(一)筆記
- Java_EE企業級開發學習筆記——spring學習筆記第一章Java筆記Spring
- Spring Boot 學習筆記(1):快速上手Spring Boot筆記
- Spring AOP學習筆記01:AOP概述Spring筆記
- spring boot學習簡要筆記1Spring Boot筆記
- 【學習筆記】Spring與Junit的整合筆記Spring
- springcloud學習筆記(二)Spring Cloud FeignSpringGCCloud筆記
- springcloud學習筆記(三)Spring Cloud RibbonSpringGCCloud筆記
- springcloud學習筆記(四)Spring Cloud HystrixSpringGCCloud筆記
- springcloud學習筆記(五)Spring Cloud ActuatorSpringGCCloud筆記
- springcloud學習筆記(六)Spring Cloud ZuulSpringGCCloud筆記Zuul
- Spring框架學習筆記(一):官方文件介紹,IoC與AOP概念學習Spring框架筆記
- kitten 學習教程(一) 學習筆記筆記
- Angular 學習筆記(一)Angular筆記
- React 學習筆記【一】React筆記
- vue學習筆記一Vue筆記
- Canvas學習筆記(一)Canvas筆記
- Jquery學習筆記(一)jQuery筆記
- goLang學習筆記(一)Golang筆記
- Android學習筆記一Android筆記