1. 控制反轉---- Spring經過一種稱做控制反轉(IoC Inversion of Control)的技術促進了低耦合, 當應用了IoC,一個對象依賴的其它對象會經過被動的方式傳遞進來,而不是這個對象本身建立或者查找依賴對象。IOC 把對象的建立交給了 Spring,下降了咱們代碼類和類之間的耦合度,方便咱們對程序進行擴展和維護java
2. 面向切面----Spring提供了面向切面(AOP Aspect Oriented Programming)的豐富支持,容許經過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transation)管理)進行內聚性的開發。應用對象只實現它們應該作的——完成業務邏輯。在不修改原有代碼的基礎上增長新的功能,在日誌和異常處理方面很經常使用web
**spring註解spring
(1) spring做用在類上的註解有@Component、@Responsity、@Service以及@Controller;而@Autowired和@Resource是用來修飾字段、構造函數或者設置方法,並作注入的。app
(2) 當註解做用在類上時,代表這些類是交給spring容器進行管理的,而當使用@Autowired和@Resource時,代表我須要某個屬性、方法或字段,可是並不須要我本身去new一個,只須要使用註解, spring容器會自動的將我須要的屬性、方法或對象創造出來。這就是一般所說的依賴注入和控制反轉。函數
3. applicationContext.xml 的配置的一些標籤spa
id:惟一標識,不能重複
name:設置名字,若是有 id 的話能夠和別的重複,不然不能
class:類的全名:包名 + 類名
scope:設置建立模式
singleton:單例,只有一個對象,默認的,最經常使用的(默認)
prototype:多例,每次都是一個新的對象
init-method / destroy-method:在對象建立和銷燬的時候調用的方法,
只有在 singleton 下有效,而且方法不能有參數
lazy-init:默認 false 在 bean factories 建立的時候,建立註冊過的全部單例類
bean factories 在第一使用 getBean 獲取單例對象的時候建立
設置爲 true 就是懶加載,只有第一次使用的時候纔會去建立對象
autowire:自動把註冊過的 bean 關聯到當前 bean 對應的屬性上
byType:若是註冊過的 bean 的類型和屬性的類型一致,那麼進行賦值操做prototype
這個會實現自動賦值操做日誌
byName:根據註冊過的 bean 的名字自動注入屬性xml
4. DI:Dependency Inject 依賴注入 建立對象時動態爲屬性賦值 對象
兩種方式:setter 注入和 構造方法注入,IOC 是 Spring 幫咱們建立對象,DI 是 Spring 幫咱們爲屬性賦值
1. 經過 setter 方法進行設置
<property name="name" value="奧迪雙鑽">
2. 經過構造方法進行設置(index 是參數的索引,從 0 開始 , index 和 type 能夠省略)
<constructor-arg name="price" value="200"></constructor-arg>
3. 使用 SpEL 語言賦值:寫一些簡單的 java 代碼
<property name="name" value="#{'bmw'.toUpperCase()}"></property>
<property name="name" value="#{user.name + ' 的汽車'}"></property>
4. p 標籤: 須要引入 xmlns:p="http://www.springframework.org/schema/p"
在 bean 標籤的屬性中使用 p:屬性名="" 進行賦值操做
對象賦值須要使用 ref,包括 p 標籤也是 p:屬性名-ref="bean 的 id"
<property name="owner" ref="user"></property>
5. 集合的賦值
<list></list> ArrayList
<set></set> HashSet
<map> HashMap
<entry>
<key></key>
<value></value>
</entry>
</map>
<props> Properties
<prop key="">value</prop>
<prop key="">value</prop>
</props>
5. 切入點和切入點表達式
切入點:
before:方法執行前,=== 參數校驗
after:方法執行後,不管是否產生異常 === 清理資源
after-returing:方法正常執行完畢 === 修改返回值
after-throwing:方法拋出異常 === 包裝異常信息
around:方法執行先後兩個點
pointcut:切入點表達式
execution(修飾符 返回值 包名.類名.方法名(參數類型))
修飾符:能夠省略
返回值:不能省略,可使用 * 代替
包名:com 不能省,可使用 * 代替,
中間的包名也可使用 * 代替,若是想省略須要寫 .. 代替
類名,方法名:不能省略,可使用 * 代替
參數:若是隻有一個參數可使用 * 代替,若是有多個參數可使用 .. 代替
6. web 項目
在web.xml 中做以下設置
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>