javascript
Spring入门与常用配置
什么是Spring
?Spring:SE/EE開發(fā)的一站式框架。
? ? ?一站式框架:有EE開發(fā)的每一層解決方案。
?WEB層 :SpringMVC
? Service層 :Spring的Bean管理,Spring聲明式事務(wù)
?DAO層 :Spring的Jdbc模板,Spring的ORM模塊
為什么學(xué)習(xí)Spring
?Spring的入門(IOC)
什么IOC?
IOC:?Inversion of Control(控制反轉(zhuǎn))。
控制反轉(zhuǎn):將對象的創(chuàng)建權(quán)反轉(zhuǎn)給(交給)Spring。
下載Spring的開發(fā)包
官網(wǎng):http://spring.io/
?
?docs :Spring的開發(fā)規(guī)范和API
libs :Spring的開發(fā)的jar和源碼
schema :Spring的配置文件的約束
創(chuàng)建web項(xiàng)目,引入jar包
?
創(chuàng)建接口和類
問題:如果底層的實(shí)現(xiàn)切換了,需要修改源代碼,能不能不修改程序源代碼對程序進(jìn)行擴(kuò)展?
將實(shí)現(xiàn)類交給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執(zhí)行了......");} }?設(shè)置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對功能進(jìn)行實(shí)現(xiàn)
package spring.learn;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringDemo1 {//傳統(tǒng)的調(diào)用方式public void demo1(){userDAO userDAO=new userDAOImp();userDAO.save();}//Spring的方式的調(diào)用public void demo2(){//創(chuàng)建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();} }結(jié)果顯示
IOC和DI(*****)
IOC:控制反轉(zhuǎn),將對象的創(chuàng)建權(quán)反轉(zhuǎn)給了Spring。 DI:依賴注入,前提必須有IOC的環(huán)境,Spring管理這個(gè)類的時(shí)候?qū)㈩惖囊蕾嚨膶傩宰⑷?#xff08;設(shè)置)進(jìn)來。 面向?qū)ο蟮臅r(shí)候 依賴 Class A{}Class B{public void xxx(A a){} } 繼承:is a Class A{} Class B extends A{}Spring的工廠類
Spring工廠類的結(jié)構(gòu)圖
ApplicationContext繼承BeanFactory
BeanFactory:老版本的工廠類? ? ? ??BeanFactory:調(diào)用getBean的時(shí)候,才會生成類的實(shí)例。
?ApplicationContext:新版本的工廠類
ApplicationContext:加載配置文件的時(shí)候,就會將Spring管理的類都實(shí)例化。
ApplicationContext有兩個(gè)實(shí)現(xiàn)類
ClassPathXmlApplicationContext:加載類路徑下的配置文件
FileSystemXmlApplicationContext :加載文件系統(tǒng)下的配置文件
Bean的相關(guān)配置
<bean>標(biāo)簽的id和name的配置
id :使用了約束中的唯一約束。里面不能出現(xiàn)特殊字符的。
? ? ? ? name :沒有使用約束中的唯一約束(理論上可以出現(xiàn)重復(fù)的,但是實(shí)際開發(fā)不能出現(xiàn)的)。里面可以出現(xiàn)特殊字符。
? ? ? ? ? ?Spring和Struts1框架整合的時(shí)候
? ? ? ? ? ?<bean name=”/user”?class=””/>
1Bean的生命周期的配置(了解)
? ? ? ? init-method :Bean被初始化的時(shí)候執(zhí)行的方法
- destroy-method :Bean被銷毀的時(shí)候執(zhí)行的方法(Bean是單例創(chuàng)建,工廠關(guān)閉)
Bean的作用范圍的配置(重點(diǎn))
scope? ? :Bean的作用范圍?
?Spring的Bean實(shí)例化方式(了解)
Bean已經(jīng)都交給Spring管理,Spring創(chuàng)建這些類的時(shí)候,有幾種方式:
無參構(gòu)造的方式(默認(rèn))
編寫無參構(gòu)造類?
public class Bean1 {public Bean1(){System.out.println("Bean1的無參構(gòu)造方法執(zhí)行了......");} } <!--配置無參構(gòu)造方法--><bean id="bean1" class="spring.learn.demo1.Bean1"></bean>實(shí)現(xiàn)功能
public class SpringDemo1 {public static void main(String[] args) {//創(chuàng)建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Bean1 bean1=(Bean1) applicationContext.getBean("bean1");} }靜態(tài)工廠實(shí)例化方式
?配置
實(shí)例工廠實(shí)例化的方式
?配置
?Spring的屬性注入
構(gòu)造方法屬性注入
編寫類
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 +'}';} } <!--構(gòu)造方法的方式注入--><bean id="car" class="spring.learn.demo2.Car"><constructor-arg name="name" value="寶馬" /><constructor-arg name="price" value="800000" /></bean>實(shí)現(xiàn)
public class SpringDemo2 {public static void main(String[] args) {//創(chuàng)建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>?實(shí)現(xiàn)方式
public class SpringDemo2 {public static void main(String[] args) {//創(chuàng)建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Car2 car2=(Car2)applicationContext.getBean("car2");System.out.println(car2.toString());} }set方法設(shè)置對象類型的屬性
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方法設(shè)置對象類型的屬性--><bean id="employee" class="spring.learn.demo2.Employee"><!--Value:設(shè)置普通類型的值,ref設(shè)置其他類的id或者name--><property name="name" value="zyz" /><property name="car2" ref="car2" /></bean>實(shí)現(xiàn)
public class SpringDemo3 {public static void main(String[] args) {//創(chuàng)建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以后)
? ? ?SpEL:Spring Expression Language,Spring的表達(dá)式語言。
?
集合類型屬性注入(了解)
<!-- 注入數(shù)組類型 -->
?
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) +'}';} } <!--注入數(shù)組類型--><bean id="collectionBean" class="spring.learn.demo2.CollectionBean"><!--數(shù)組類型的--><property name="arr"><list><value>王東</value><value>趙洪</value><value>李冠希</value></list></property></bean> public void arrdemo1(){//創(chuàng)建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(){//創(chuàng)建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(){//創(chuàng)建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(){//創(chuàng)建Spring的工廠ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");MapBean mapBean=(MapBean)applicationContext.getBean("mapBean");System.out.println(mapBean.toString());}?
Spring的分模塊開發(fā)的配置
在加載配置文件的時(shí)候,加載多個(gè)
?
?
在一個(gè)配置文件中引入多個(gè)配置文件
?
轉(zhuǎn)載于:https://www.cnblogs.com/byczyz/p/11588133.html
總結(jié)
以上是生活随笔為你收集整理的Spring入门与常用配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 千山暮雪第二部剧情介绍
- 下一篇: 第五周课程总结实验报告(三)