日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java之spring新手教程(包教包会)

發布時間:2023/12/2 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java之spring新手教程(包教包会) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java-Spring(一)之IoC以及bean的生命周期

文章目錄

  • Java-Spring(一)之IoC以及bean的生命周期
    • 一、什么是Spring
    • 二、Spring的核心
    • 三、什么是耦合
    • 四、spring項目的搭建
    • 五、配置文件
    • 六、IoC(控制反轉)
    • 七、屬性注入的方式
      • 1、設值注入
      • 2、構造方法注入
    • 八、DI(依賴注入)
    • 九、集合屬性的注入
      • 1、內部注入
      • 2、外部注入
    • 十、Spring管理Bean的作用域
      • 1、singleton(單實例)
      • 2、prototype
      • 3、request
      • 4、session
      • 5、global session
    • 十一、Bean的生命周期
      • 1、五步
      • 2、七步
    • 十二、Bean的兩種方式
      • 1、創建普通Bean對象
      • 2、創建工程Bean工廠


一、什么是Spring


這是度娘上的比較官方的解釋。
說得更加詳細一點,Spring是一個開源框架,Spring是于2003年興起的一個輕量級的Java開發框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個組件,同時為J2EE應用程序開發提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。Spring的核心是控制反轉(IoC)和面向切面(AOP)。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式)輕量級開源框架。

二、Spring的核心

Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴于Spring的特定類。

控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們并不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持。

容器——Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基于一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不應該被混同于傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。

框架——Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。
所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。

三、什么是耦合

簡單來講耦合指的就是兩個類之間的聯系的緊密程度
最簡單的例子就是我些了一段代碼,而在另外一個地方又寫了一遍差不了太對的代碼。這樣可以成為耦合度高。

在java編程的過程中,我們盡量要避免重復的造輪子,應運而生的框架就誕生了,Spring就能夠做到解耦合。

四、spring項目的搭建

這里我是用的是maven倉庫來添加的依賴
把以下依賴加入pom文件中

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.3</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.9</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.8</version></dependency><!-- https://mvnrepository.com/artifact/taglibs/standard --><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency>

這就是我們spring所需要的基礎的依賴

五、配置文件

在資源文件包下建立一個XML文件作為我們spring的一個配置文件

六、IoC(控制反轉)

在基本的項目搭建完成之后,我們就要先來了解Spring的核心之一:
IoC(控制反轉)
在我們以前的程序書寫中,我們用到對象大都是以new的方式去創建對象:
以前學到創建對象的方式
1、new
2、反射
3、序列化

那么Spring給我們提供的一種全新的創建對象的方式。
我們可以把創建對象的工作全部交給Spring來給我們完成
這個就叫做IoC
比如:

@Getter @Setter @NoArgsConstructor @AllArgsConstructor @ToString public class Person {private String name;private Car car;private List<String> list; }

我這里有一個對象,那么我們要創建對象就可以去配置文件中書寫

<bean id="per" class="pojo.Person" p:name="張三" p:car-ref="car" p:list-ref="list1"/>

來表示我們創建的對象,以及相應的賦值

在主方法中調用

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");Person person = (Person) ac.getBean("per");

以getBean()的方式來獲取我們的bean對象

七、屬性注入的方式

1、設值注入

<!-- set 注入(設值注入) spring 調用對象中set方法簡單類型注入<property name="屬性名" value="值"/> --><bean id="user" class="pojo.User"><property name="userName" value="張三"/><property name="password" value="123456"/><property name="role" ref="role"/></bean>

這其實就是簡單的調用set方法來給屬性賦初值,如果在類中沒有set方法,就會出現異常

2、構造方法注入

<!-- 構造注入 調用有參構造方法 聲明對象不用關心順序,二次掃描--><bean id="user1" class="pojo.User"><constructor-arg name="userName" value="李四"/><constructor-arg name="password" value="654321"/><constructor-arg name="role" ref="role"/></bean>

顧名思義,和設置注入一樣就是通過構造器去給屬性賦值,同set一樣,也是必須要有有參構造方法的書寫的。

八、DI(依賴注入)

IoC的一個重點是在系統運行中,動態的向某個對象提供它所需要的其他對象。這一點是通過DI(Dependency IInjection,依賴注入)來實現的。

比如對象A需要操作數據庫,以前我們總是要在A中自己編寫代碼來獲得一個Connection對象,有了 spring我們就只需要告訴spring,A中需要一個Connection,至于這個Connection怎么構造,何時構造,A不需要知道。在系統運行時,spring會在適當的時候制造一個Connection,然后像打針一樣,注射到A當中,這樣就完成了對各個對象之間關系的控制。A需要依賴 Connection才能正常運行,而這個Connection是由spring注入到A中的,依賴注入的名字就這么來的。那么DI是如何實現的呢? Java 1.3之后一個重要特征是反射(reflection),它允許程序在運行的時候動態的生成對象、執行對象的方法、改變對象的屬性,spring就是通過反射來實現注入的。

其實在上面的例子中我們也用到了DI,

<constructor-arg name="role" ref="role"/>

這里的User也依賴與我們的Role的一個對象,

所以我們要在配置文件中添加一個新的Bean對象。

<bean id="user" class="pojo.User"><property name="userName" value="張三"/><property name="password" value="123456"/><property name="role" ref="role"/></bean> <!-- 對象注入 --><bean id="role" class="pojo.Role"><property name="roleName" value="openlab"/></bean>

注意:在我們DI的過程中我們是不需要去注意Bean對象的順序,spring會進行二次掃描,來創建我們需要有依賴的對象。

九、集合屬性的注入

其實集合也是一種對象我們可以通過DI的方式去注入集合屬性

1、內部注入

<bean id="per" class="pojo.Person" p:name="張三" p:car-ref="car"><property name="list"><list><value>123</value><value>123</value><value>123</value></list></property></bean>

在我們的Bean對象的內部去注入我們的屬性<list>就是我們注入的集合類型

set集合 map映射改這里就行

<map><entry key="1" value="123"></entry></map>

由于map是以鍵值對的形式存儲的,我們在給值的同時,也要以entry來給值

2、外部注入

這里我們就要用到我們的頭部文件,

xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">

就能在我們xml配置文件中來用到我們的util工具

<util:list id="list1"><value>123</value><value>123</value><value>123</value></util:list>

十、Spring管理Bean的作用域

spring bean作用域的作用域有5種
Spring Bean 中所說的作用域,在配置文件中即是“scope”

1、singleton(單實例)

是默認的作用域
在不配置scope時我們創建的對象時單例的

Person person = (Person) ac.getBean("per0");Person person1 = (Person) ac.getBean("per0");Person person2 = (Person) ac.getBean("per0");Person person3 = (Person) ac.getBean("per0");


所有對象的地址相同

2、prototype

修改scope的值為prototype之后

就變成了不同的對象

3、request

Request作用域針對的是每次的Http請求,Spring容器會根據相關的Bean的
定義來創建一個全新的Bean實例。而且該Bean只在當前request內是有效的。

4、session

針對某個HTTP Session,Spring容器會根據userPreferences bean定義創建一個全新的userPreferences bean實例, 且該userPreferences bean僅在當前HTTP Session內有效。 與request作用域一樣,你可以根據需要放心的更改所創建實例的內部狀態,而別的HTTP Session中根據userPreferences創建的實例, 將不會看到這些特定于某個HTTP Session的狀態變化。 當HTTP Session最終被廢棄的時候,在該HTTP Session作用域內的bean也會被廢棄掉。

5、global session

global session作用域類似于標準的HTTP Session作用域,不過它僅僅在基于portlet的web應用中才有意義。Portlet規范定義了全局Session的概念,它被所有構成某個portlet web應用的各種不同的portlet所共享。在global session作用域中定義的bean被限定于全局portlet Session的生命周期范圍內。

十一、Bean的生命周期

1、五步

1、構造
2、set賦值
3、初始化
4、對象獲取到了
5、銷毀

這里我們要重寫init方法和destroy方法

public class BeanLife {private String name;public BeanLife () {System.out.println("無參構造");}public void setName (String name) {System.out.println("Set");this.name = name;}public void init(){System.out.println("init");}public void destroy(){System.out.println("destroy");} }

執行結果為

2、七步

在Bean創建對象的時還有一種在前后插入方法的類

public class BeanLife1 implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization (Object bean, String beanName) throws BeansException {System.out.println("之前");return bean;}@Overridepublic Object postProcessAfterInitialization (Object bean, String beanName) throws BeansException {System.out.println("之后");return bean;} } <bean class="pojo.BeanLife" id="beanLife" p:name="張三" init-method="init" destroy-method="destroy"/><bean class="pojo.BeanLife1" id="beanLife1"/>

我們創建BeanLife時就會出現


1、構造
2、set賦值
3、之前插入方法
4、初始化
5、對象獲取到了
6、之后回去方法
7、銷毀

十二、Bean的兩種方式

1、創建普通Bean對象

就是最普通的創建普通Bean對象

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext1.xml");Person person = ac.getBean("factory",Person.class);person.setName("lili");System.out.println(person);

2、創建工程Bean工廠

public class Factory implements FactoryBean<Person> {@Overridepublic Person getObject () throws Exception {return new Person();}@Overridepublic Class<?> getObjectType () {return Person.class;} }

然后來通過工廠來創建隊形的實例

總結

以上是生活随笔為你收集整理的Java之spring新手教程(包教包会)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。