Spring入門與常用配置

什么是Spring

?SpringSE/EE開發的一站式框架。

? ? ?一站式框架:有EE開發的每一層解決方案。

    ?WEB SpringMVC

    ? Service SpringBean管理,Spring聲明式事務

    ?DAO SpringJdbc模板,SpringORM模塊

為什么學習Spring

?Spring的入門(IOC

什么IOC?

IOC:?Inversion of Control(控制反轉)

  控制反轉:將對象的創建權反轉給(交給)Spring

下載Spring的開發包

官網:http://spring.io/

?

?docs Spring的開發規范和API

libs Spring的開發的jar和源碼

schema Spring的配置文件的約束

創建web項目,引入jar包

?

創建接口和類

問題:如果底層的實現切換了,需要修改源代碼,能不能不修改程序源代碼對程序進行擴展?

將實現類交給Spring管理

spring的解壓路徑下spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

?

編寫測試類

編寫userDAO和userDAOImp

userDAO

public interface userDAO {public void save();
}

?userDAOImp

public class userDAOImp implements userDAO {@Overridepublic void save() {System.out.println("userDAOImp執行了......");}
}

?設置spring的xml applicationContext.xml? ?可以隨意命名

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--spring入門的配置--><bean id="userDAO" class="spring.learn.userDAOImp"></bean>
</beans>

?最后編寫SpringDemo1對功能進行實現

package spring.learn;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringDemo1 {//傳統的調用方式public void demo1(){userDAO userDAO=new userDAOImp();userDAO.save();}//Spring的方式的調用public void demo2(){//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");userDAO userDAO=(userDAO)applicationContext.getBean("userDAO");userDAO.save();}public static void main(String[] args) {SpringDemo1 springDemo1=new SpringDemo1();springDemo1.demo1();springDemo1.demo2();}
}

結果顯示

IOCDI*****

IOC:控制反轉,將對象的創建權反轉給了Spring。
DI:依賴注入,前提必須有IOC的環境,Spring管理這個類的時候將類的依賴的屬性注入(設置)進來。
面向對象的時候
依賴
Class A{}Class B{public void xxx(A a){}
}
繼承:is a
Class A{}
Class B extends A{}

Spring的工廠類

Spring工廠類的結構圖

ApplicationContext繼承BeanFactory

    BeanFactory:老版本的工廠類? ? ? ??BeanFactory:調用getBean的時候,才會生成類的實例。

?ApplicationContext:新版本的工廠類

ApplicationContext:加載配置文件的時候,就會將Spring管理的類都實例化。

ApplicationContext有兩個實現類

ClassPathXmlApplicationContext:加載類路徑下的配置文件

FileSystemXmlApplicationContext :加載文件系統下的配置文件

Bean的相關配置

<bean>標簽的id和name的配置

  id :使用了約束中的唯一約束。里面不能出現特殊字符的。

? ? ? ? name :沒有使用約束中的唯一約束(理論上可以出現重復的,但是實際開發不能出現的)。里面可以出現特殊字符。

? ? ? ? ? ?SpringStruts1框架整合的時候

? ? ? ? ? ?<bean name=”/user”?class=””/>

1Bean的生命周期的配置(了解)

? ? ? ? init-method :Bean被初始化的時候執行的方法

  • destroy-method :Bean被銷毀的時候執行的方法(Bean是單例創建,工廠關閉)

Bean的作用范圍的配置(重點)

scope? ? :Bean的作用范圍?

  1. singleton:默認的,Spring會采用單例模式創建這個對象。
  2. ?prototype:多例模式。(Struts2Spring整合一定會用到)
  3. ?request :應用在web項目中,Spring創建這個類以后,將這個類存入到request范圍中。
  4. session :應用在web項目中,Spring創建這個類以后,將這個類存入到session范圍中。
  5. ?globalsession :應用在web項目中,必須在porlet環境下使用。但是如果沒有這種環境,相對于session

?Spring的Bean實例化方式(了解)

Bean已經都交給Spring管理,Spring創建這些類的時候,有幾種方式:

無參構造的方式(默認)

編寫無參構造類?

public class Bean1 {public Bean1(){System.out.println("Bean1的無參構造方法執行了......");}
}
<!--配置無參構造方法--><bean id="bean1" class="spring.learn.demo1.Bean1"></bean>

實現功能

public class SpringDemo1 {public static void main(String[] args) {//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Bean1 bean1=(Bean1) applicationContext.getBean("bean1");}
}

靜態工廠實例化方式

?配置

實例工廠實例化的方式

?配置

?Spring的屬性注入

構造方法屬性注入

編寫類

public class Car {public String name;public double price;public Car(String name,double price){this.name=name;this.price=price;}@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", price=" + price +'}';}
}
 <!--構造方法的方式注入--><bean id="car" class="spring.learn.demo2.Car"><constructor-arg name="name" value="寶馬" /><constructor-arg name="price" value="800000" /></bean>

實現

public class SpringDemo2 {public static void main(String[] args) {//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Car car=(Car)applicationContext.getBean("car");System.out.println(car.toString());}
}

set方法方式的屬性注入

public class Car2 {public String name;public double price;public void setName(String name) {this.name = name;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Car2{" +"name='" + name + '\'' +", price=" + price +'}';}
}

?配置

<!--Set方法的方式的屬性注入--><bean id="car2" class="spring.learn.demo2.Car2"><property name="name" value="奔馳" /><property name="price" value="10000000000" /></bean>

?實現方式

public class SpringDemo2 {public static void main(String[] args) {//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Car2 car2=(Car2)applicationContext.getBean("car2");System.out.println(car2.toString());}
}

set方法設置對象類型的屬性

public class Employee {public String name;public Car2 car2;public void setName(String name) {this.name = name;}public void setCar2(Car2 car2) {this.car2 = car2;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", car2=" + car2 +'}';}
}

配置

<!--Set方法的方式的屬性注入--><bean id="car2" class="spring.learn.demo2.Car2"><property name="name" value="奔馳" /><property name="price" value="10000000000" /></bean><!--Set方法設置對象類型的屬性--><bean id="employee" class="spring.learn.demo2.Employee"><!--Value:設置普通類型的值,ref設置其他類的id或者name--><property name="name" value="zyz" /><property name="car2" ref="car2" /></bean>

實現

public class SpringDemo3 {public static void main(String[] args) {//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Employee employee=(Employee)applicationContext.getBean("employee");System.out.println(employee.toString());}
}

?P名稱空間的屬性注入(Spring2.5以后)

    通過引入p名稱空間完成屬性的注入:

      寫法:

        普通屬性 p:屬性名=

        對象屬性 p:屬性名-ref=

?p名稱空間的引入

使用p名稱空間

?SpEL的屬性注入(Spring3.0以后)

? ? ?SpELSpring Expression LanguageSpring的表達式語言。

?

集合類型屬性注入(了解)

<!-- 注入數組類型 -->

?

import java.util.Arrays;public class CollectionBean {public String arr[];public void setArr(String[] arr) {this.arr = arr;}@Overridepublic String toString() {return "CollectionBean{" +"arr=" + Arrays.toString(arr) +'}';}
}
<!--注入數組類型--><bean id="collectionBean" class="spring.learn.demo2.CollectionBean"><!--數組類型的--><property name="arr"><list><value>王東</value><value>趙洪</value><value>李冠希</value></list></property></bean>
public void arrdemo1(){//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");CollectionBean collectionBean=(CollectionBean)applicationContext.getBean("collectionBean");System.out.println(collectionBean.toString());}

?

?

<!--注入list集合-->

import java.util.List;public class ListBean {public List list;public void setList(List list) {this.list = list;}@Overridepublic String toString() {return "ListBean{" +"list=" + list +'}';}
}
<!--注入list集合--><bean id="listBean" class="spring.learn.demo2.ListBean"><property name="list"><list><value>王東</value><value>趙洪</value><value>李冠希</value></list></property></bean>
public void listdemo1(){//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");ListBean listBean=(ListBean)applicationContext.getBean("listBean");System.out.println(listBean.toString());}

?

注入Set集合

import java.util.Set;public class SetBean {public Set set;public void setSet(Set set) {this.set = set;}@Overridepublic String toString() {return "SetBean{" +"set=" + set +'}';}
}
<!--注入Set集合--><bean id="setBean" class="spring.learn.demo2.SetBean"><property name="set"><set><value>aaa</value><value>bbb</value><value>ccc</value></set></property></bean>
public void setdemo1(){//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");SetBean setBean=(SetBean)applicationContext.getBean("setBean");System.out.println(setBean.toString());}

?

注入Map集合

import java.util.Map;public class MapBean {public Map map;public void setMap(Map map) {this.map = map;}@Overridepublic String toString() {return "MapBean{" +"map=" + map +'}';}
}
<!--注入Map集合--><bean id="mapBean" class="spring.learn.demo2.MapBean"><property name="map"><map><entry key="aaa" value="111"/><entry key="bbb" value="222"/><entry key="ccc" value="333"/></map></property></bean>
public void mapdemo1(){//創建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");MapBean mapBean=(MapBean)applicationContext.getBean("mapBean");System.out.println(mapBean.toString());}

?

Spring的分模塊開發的配置

在加載配置文件的時候,加載多個

?

?

在一個配置文件中引入多個配置文件

?

轉載于:https://www.cnblogs.com/byczyz/p/11588133.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MMKV集成與原理,詳細學習指南

前言 本文主要是javascript和css方面的基礎面試題&#xff0c;適合面試前以及平時復習食用。 基礎知識是前端一面必問的&#xff0c;如果你在基礎知識這一塊翻車了&#xff0c;就算你框架玩的再6&#xff0c;webpack、git、node學習的再好也無濟于事&#xff0c;因為對方就不…

第五周課程總結實驗報告(三)

實驗三 String類的應用 一、實驗目的 &#xff08;1&#xff09; 掌握類String類的使用&#xff1b; &#xff08;2&#xff09; 學會使用JDK幫助文檔&#xff1b; 二、實驗內容 1.已知字符串&#xff1a;"this is a test of java".按要求執行以下操作&#xff1a;&a…

MMKV集成與原理,趕緊學起來

開頭 Web前端開發基礎知識學習路線分享&#xff0c;前端開發入門學習三大基礎&#xff1a;HTML、CSS、JavaScript。除此之外還要學習數據可視化、Vue、React、Angular相關框架&#xff0c;熟練運用框架提升開發效率&#xff0c;提升穩定性。 [外鏈圖片轉存失敗,源站可能有防盜…

MMKV集成與原理,輕松拿下offer

從事前端開發工作差不多3年了&#xff0c;自己也從一個什么都不懂的小白積累了一定的理論和實踐經驗&#xff0c;并且自己也對這3年來的學習實踐歷程有一個梳理&#xff0c;以供后面來細細回憶品味。 1、為什么選擇學習前端開發&#xff1f; 你可能是因為興趣&#xff0c;完成…

React面試題總結,一文說清!

前言 JavaScript是面向 Web 的編程語言&#xff0c;獲得了所有網頁瀏覽器的支持&#xff0c;是目前使用最廣泛的腳本編程語言之一&#xff0c;也是網頁設計和 Web 應用必須掌握的基本工具。 JavaScript主要用途 嵌入動態文本與HTML頁面對瀏覽器時間做出相應讀寫HTML元素在數…

React面試題總結,含愛奇藝,小米,騰訊,阿里

前言 校招 -1 年 這個階段還屬于成長期&#xff0c;更需要看重的是你的基礎和熱情。對于 JS 基礎&#xff0c;計算機基礎&#xff0c;網絡通信&#xff0c;算法等部分的要求會相對高一些。畢竟這個階段比較難考察你的業務項目中的沉淀&#xff0c;所以只能從基礎部分入手考察。…

React面試題總結,就是這么簡單

前言 昨天有幸去字節面試了&#xff0c;順便拿到了offer&#xff0c;把還記得的東西寫下來&#xff0c;供大家參考一下。 計算機網絡篇 HTTP HTTP 報文結構是怎樣的&#xff1f;HTTP有哪些請求方法&#xff1f;GET 和 POST 有什么區別&#xff1f;如何理解 URI&#xff1f;如…

CSS清除默認樣式,成功入職騰訊

前言 又逢金三銀四&#xff0c;拿到大廠的offer一直是程序員朋友的一個目標&#xff0c;我是如何拿到大廠offer的呢&#xff0c;今天給大家分享我拿到大廠offer的利器&#xff0c;前端核心知識面試寶典&#xff0c;內容囊括Html、CSS、Javascript、Vue、HTTP、瀏覽器面試題\數…

CSS清除默認樣式,技術詳細介紹

前言 JavaScript是面向 Web 的編程語言&#xff0c;獲得了所有網頁瀏覽器的支持&#xff0c;是目前使用最廣泛的腳本編程語言之一&#xff0c;也是網頁設計和 Web 應用必須掌握的基本工具。 JavaScript主要用途 嵌入動態文本與HTML頁面對瀏覽器時間做出相應讀寫HTML元素在數…

CSS清除默認樣式,看完這篇徹底明白了

前端的興起 前端真正興起和開始頻繁出現在大家的視線里&#xff0c;大概是在十年前。彼時的 Web 開發基本是由后端主導&#xff0c;前端能做的只是校驗一下數據、操作一下 DOM。&#xff08;其中數據檢驗是 JS 產生的根本原因&#xff1a;當時網絡太慢&#xff0c;在服務端檢驗…

合并兩個鏈表,去掉重復元素

最近在學習機器學習的相關算法&#xff0c;寫到DbScan算法發現在簇擴展時用到兩個鄰域中的點會重合&#xff0c;于是嘗試了合并兩個鏈表的兩個算法。 最初用到這個方法&#xff0c;認為它簡單易用。思路是定義一個鏈表存放合并后的鏈表list&#xff0c;首先往該鏈表中加入a鏈表…

CSS清除默認樣式,經典好文

前言 不要為了面試而去背題&#xff0c;匆匆忙忙的&#xff0c;不僅學不進去&#xff0c;背完了幾天后馬上會忘記。 你可能會說&#xff0c;“沒辦法&#xff0c;這不是為了能找份工作嘛&#xff01;”。我想說的是&#xff0c;“那你沒開始找工作的時候&#xff0c;咋不好好…

java實現k-means算法(用的鳶尾花iris的數據集,從mysq數據庫中讀取數據)

k-means算法又稱k-均值算法&#xff0c;是機器學習聚類算法中的一種&#xff0c;是一種基于形心的劃分方法&#xff0c;其中每個簇的中心都用簇中所有對象的均值來表示。其思想如下&#xff1a; 輸入&#xff1a; k&#xff1a;簇的數目&#xff1b;D&#xff1a;包含n個對象的…

CSS清除默認樣式,聰明人已經收藏了!

1、ant-design的使用總結及常用組件和他們的基本用法? ant-design為React&#xff0c;Angular和Vue都提供了組件&#xff0c;同時為PC和移動端提供了常用的基礎組件。ant-design提供的demo非常的豐富并且樣式能夠基本的覆蓋開發需求。antd的Demo因為是多人編寫的&#xff0c;…

淺談“==”、equals和hashcode,以及map的遍歷方法(可用作上一篇k-means博文參考)

前不久看到一個公司的面試題&#xff0c;問到“”和“equals”的區別&#xff0c;些許上答不上來&#xff0c;于是木羊搜索并整理了一下。此外&#xff0c;木羊前面寫了k-means算法實現的博文&#xff0c;其中提到要重寫equals和hashcode類&#xff0c;看完這篇博文&#xff0c…

CSS清除默認樣式,面試篇

前言 過完年了&#xff0c;準備實習的你是已經在實習了&#xff0c;還是已經辭職回家過年&#xff0c;準備年后重新找工作呢&#xff0c;又或者是準備2021年春招&#xff1f; 那么還沒沒踏出校門或者是剛出校門沒多久的同學們該如何準備前端校招的面試呢&#xff1f; 學習建議…

CSS的三種基礎選擇器,面試必問

前言 最近在準備面試&#xff0c;然后復習下之前寫過的項目&#xff0c;書籍&#xff0c;筆記&#xff0c;文章。一看很多知識點都沒有印象&#xff0c;最可拍的是連自己為了防止忘記寫的文章竟然都感覺不是自己寫的。有些開始懷疑人生了。 好了&#xff0c;廢話少說&#xf…

html知識筆記(一)——head和body標簽

標簽的用途&#xff1a;我們學習網頁制作時&#xff0c;常常會聽到一個詞&#xff0c;語義化。那么什么叫做語義化呢&#xff0c;說的通俗點就是&#xff1a;明白每個標簽的用途&#xff08;在什么情況下我可以使用這個標簽才合理&#xff09;比如&#xff0c;網頁上的文章的標…

CSS的三種定位,100%好評!

前言 跳槽&#xff0c;這在 IT 互聯網圈是非常普遍的&#xff0c;也是讓自己升職加薪&#xff0c;走上人生巔峰的重要方式。那么作為一個普通的Android程序猿&#xff0c;我們如何才能斬獲大廠offer 呢&#xff1f; 疫情向好、面試在即&#xff0c;還在迷茫躊躇中的后浪們&…

html知識筆記(二)——div、table、a標簽

div標簽&#xff1a;我們把一些標簽放進<div>里&#xff0c;劃分出一個獨立的邏輯部分。為了使邏輯更加清晰&#xff0c;我們可以為這一個獨立的邏輯部分設置一個名稱&#xff0c;用id屬性來為<div>提供唯一的名稱&#xff0c;這個就像我們每個人都有一個身份證號&…