spring筆記1
一.概述
1.Spring是分層的Java SE/EE應用 full-stack輕量級開源框架,以IoC和AOP為內核,提供了展現層Spring MVC和持久層Spring JDBC以及業務層事務管理等眾多的企業級應用技術,還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的Java EE企業應用開源框架。
2.Rod Johnson(spring之父)
Expert One-to-One J2EE Design and Development(2002)
闡述了J2EE使用EJB開發設計的優點及解決方案
Expert One-to-One J2EE Development without EJB(2004)
闡述了J2EE開發不使用EJB的解決方式(Spring雛形)
3.優勢:
方便解耦,簡化開發;
AOP編程的支持;
聲明式事務的支持;
方便程序的測試;
方便集成各種優秀框架;
降低JavaEE API的使用難度;
Java源碼是經典學習範例
二.相關概念
耦合:類之間的依賴關系稱為耦合;
控制反轉-Inversion Of Control:將主動new對象的方式轉變為通過工廠進行被動創建的方式,稱為控制反轉,是一種思想轉變;
依賴註入:將屬性值註入到屬性中的具體技術,spring中有兩種依賴註入方式:構造方法註入/set方式註入;
三.環境搭建
1.導包;
4+2:4個spring核心包,2個依賴包(阿帕奇的日誌包logging/log4j)
圖1
2.創建類
3.創建配置文件(applicationContext.xml)
舉例:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!--引入約束 --> 3 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> 5 <!-- 將user類交給spring管理 6 name:不可重復; 7 class:類的全限定名; 8 scope:指定spring中對象的作用的域 9 singleton(默認值):單例,對象在啟動時創建; 10 prototype:原型多例,每次獲得對象時,都創建新的對象; 11 --> 12 <!--以下註入為spring調用構造方法創建 /set方法註入--> 13 <bean name="user1" class="huguangqin.com.cnblogs.domain.User"> 14 <property name="name" value="jack"></property> 15 <property name="age" value="18"></property> 16 </bean>
4.測試
1 package huguangqin.com.cnblogs.demo; 2 import org.junit.Test; 3 import org.springframework.context.support.ClassPathXmlApplicationContext; 4 public class demo1 { 5 @Test 6 public void demoTest() { 7 // 創建spring容器 8 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); 9 // 從spring容器中取user對象 10 Object bean = ac.getBean("user1"); 11 System.out.println(bean); 12 } 13 } 14 15
四.依賴註入配置(applicationContext.xml)
1.set方法註入
1 <!-- 以下註入為spring調用構造方法創建或set方法註入 --> 2 <bean name="user1" class="huguangqin.com.cnblogs.domain.User"> 3 <property name="name" value="jack"></property> 4 <property name="age" value="18"></property> 5 </bean>
2.set方法註入--p名稱空間註入
1 <!--約束中需添加:xmlns:p="http://www.springframework.org/schema/p" --> 2 <bean name="user3" class="huguangqin.com.cnblogs.domain.User" p:name="rose" p:age="22" p:car-ref="car"></bean>
3.構造方法註入
1 <!--以下為構造方法註入--> 2 <bean name="user2" class="huguangqin.com.cnblogs.domain.User"> 3 <constructor-arg name="name" value="tom"></constructor-arg> 4 <constructor-arg name="age" value="8"></constructor-arg> 5 <constructor-arg name="car" ref="car"></constructor-arg> 6 </bean> 7 <bean name="car" class="huguangqin.com.cnblogs.domain.Car"> 8 <constructor-arg name="name" value="Benz"></constructor-arg> 9 <constructor-arg name="color" value="red"></constructor-arg> 10 </bean>
4.復雜類型註入
1 <bean name="cb" class="huguangqin.com.cnblogs.domain.CollectionBean"> 2 <!--Object[] array --> 3 <property name="array"> 4 <array> 5 <value>rose</value> 6 <ref bean="car"></ref> 7 </array> 8 </property> 9 10 <!--List list--> 11 <property name="list"> 12 <list> 13 <value>jack</value> 14 <ref bean="car"></ref> 15 </list> 16 </property> 17 18 <!--Map map--> 19 <property name="map"> 20 <map> 21 <entry key="lilei" value-ref="car"></entry> 22 <entry key-ref="car" value="hanmeimei"></entry> 23 </map> 24 </property> 25 26 <!--Properties props--> 27 <property name="props"> 28 <props> 29 <prop key="poli">波莉</prop> 30 <prop key="lisa">莉莎</prop> 31 </props> 32 </property> 33 </bean> 34 35 <bean name="car" class="huguangqin.com.cnblogs.domain.Car"> 36 <constructor-arg name="name" value="Benz"></constructor-arg> 37 <constructor-arg name="color" value="red"></constructor-arg> 38 </bean> 39
spring筆記1