三大框架 之 Spring(IOC控制反轉、DI依賴注入)

經常使用詞彙

ORM(Object Relational Mapping)對象到關係的映射web

AOP(Aspect Oriented Programming)面向切面編程spring

aspect
[ˈæspekt]數據庫

n.
方面;方向;編程

oriented
['ɔ:rɪəntɪd]設計模式

adj.
面向;定向的;以…爲方向的;定方向數組

Proxy
代理服務器;即Proxy服務器;服務器

cascadesession

級聯;app

interceptor
[ˌɪntəˈseptə(r)]

n.
攔截器

template
[ˈtempleɪt]

n.
樣板;模板;型板;模框;標準

xmlns
命名空間;名字空間;名稱空間

schema
[ˈskiːmə]

n.
提綱


left join與left outer join的區別

那就是沒有區別

對,就是沒有區別

left join 是left outer join的簡寫,left join默認是outer屬性的。

https://zhidao.baidu.com/question/72568852.html

SQL LEFT JOIN 百度百科

LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回全部的行,即便在右表 (table_name2) 中沒有匹配的行。在某些數據庫中, LEFT JOIN 也稱爲 LEFT OUTER JOIN。

Struts2的標籤庫導入

(1)在JSP頁面中使用以下代碼來導入Struts2標籤庫:

pStruts 2的全部標籤庫都放在/struts-tags這個Uri下面。所以可用以下代碼導入:

<%@ taglib prefix=「s」 uri=「/struts-tags」%>

(2)使用指定標籤:

<s:abc .../>

IOC和DI的概念

  • IOC -- Inverse of Control,控制反轉,將對象的建立權反轉給Spring!!
  • DI -- Dependency Injection,依賴注入,在Spring框架負責建立Bean對象時,動態的將依賴對象注入到Bean組件中!!

DI和IOC的關係: DI不能單獨存在,DI須要在IOC的基礎上來完成.

這樣作得好處:作到了單一職責,而且提升了複用性,解耦了以後,任你如何實現,使用接口的引用調用的方法,永遠不須要改變

Spring

Spring概述

什麼是Spring

  • Spring是一個開放源代碼的設計層面框架
  • 他解決的是業務邏輯層和其餘各層的鬆耦合問題,所以它將面向接口的編程思想貫穿整個系統應用。
  • Spring是於2003 年興起的一個輕量級的Java 開發框架
  • 簡單來講,Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架

spring特色

1.方便解耦,簡化開發

  • 經過Spring提供的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。
  • 有了Spring,用戶沒必要再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。

2.AOP編程的支持

  • 經過Spring提供的AOP功能,方便進行面向切面的編程,
  • 許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付。

3.聲明式事務的支持

  • 在Spring中,咱們能夠從單調煩悶的事務管理代碼中解脫出來
  • 經過聲明式方式靈活地進行事務的管理,提升開發效率和質量

4.方便程序的測試

  • 能夠用非容器依賴的編程方式進行幾乎全部的測試工做,在Spring裏,測試再也不是昂貴的操做,而是隨手可作的事情。
  • 例如:Spring對Junit4支持,能夠經過註解方便的測試Spring程序。

5.方便集成各類優秀框架

  • Spring不排斥各類優秀的開源框架,相反,Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

6.下降Java EE API的使用難度

  • Spring對不少難用的Java EE API(如JDBC,JavaMail,遠程調用等),提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降。

7.Java 源碼是經典學習範例

  • Spring的源碼設計精妙、結構清晰、匠心獨運,到處體現着大師對Java設計模式靈活運用以及對Java技術的高深造詣。
  • Spring框架源碼無疑是Java技術的最佳實踐範例。若是想在短期內迅速提升本身的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。

下載

下載地址

IOC

什麼IOC

  • IOC: Inversion of Control(控制反轉)
  • 控制反轉:將對象的建立權反轉給(交給)Spring

傳統開發模式

業務和實現類過於緊密,底層業務要修改源代碼

經過工廠能夠實現,接口與實現業務的分離

在工廠內部使用配置文件加載

使用spring-IOC(需新建applicationContext.xml)

1.添加jar包
2.建立配置文件
​ 一般名稱起爲applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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">
</beans>


3.添加配置文件

4.測試使用

DI

依賴注入

  • 前提必須有IOC的環境
  • Spring管理這個類的時候才能將類的依賴的屬性值注入(設置)進來
  • 依賴注入:給spring管理類當中依賴的屬性,經過配置文件進行賦值的過程

傳統方式

DI方式

1.實現類當中的屬性要提供set方法

2.在配置文件當中配置依賴注入

3.測試

Spring的工廠類

BeanFactory

  • 老版本使用方式
  • 當調用getBean的時候纔會建立實例對象

ApplicationContext

  • 新版本使用方式
  • 當加載配置文件時候就會建立實例對象

ApplicationContext實現類

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

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

Bean相關配置

名稱與標識

id
    使用了約束中的惟一約束。裏面不能出現特殊字符的
name
    沒有使用約束中的惟一約束。裏面能夠出現特殊字符

設置對象的生命週期方法

init-method
    Bean被初始化的時候執行的方法
destroy-method
    Bean被銷燬的時候執行的方法(Bean是單例建立,工廠關閉)

示例

Bean的做用範圍的配置(即scope屬性值)

singleton
    默認的,Spring會採用單例模式建立這個對象。
    使用該屬性定義Bean時,IOC容器僅建立一個Bean實例,IOC容器每次返回的是同一個Bean實例。
prototype
    多例模式。
    使用該屬性定義Bean時,IOC容器能夠建立多個Bean實例,每次返回的都是一個新的實例。
request
    應用在web項目中,Spring建立這個類之後,將這個對象存入到request範圍中。
    該屬性僅對HTTP請求產生做用,使用該屬性定義Bean時,每次HTTP請求都會建立一個新的Bean,適用於WebApplicationContext環境。
session
    應用在web項目中,Spring建立這個類之後,將這個對象存入到session範圍中
    該屬性僅用於HTTP Session,同一個Session共享一個Bean實例。不一樣Session使用不一樣的實例。
globalsession
    應用在web項目中,必須在porlet(基於Java的Web組件,子域名)環境下使用。可是若是沒有這種環境,相對於session。
    該屬性僅用於HTTP Session,同session做用域不一樣的是,全部的Session共享一個Bean實例。

​ 示例

工廠實例化的方式

無參構造-默認

靜態工廠實例化

實例工廠實例化

分模塊配置

在加載時,添加多個配置文件名稱

在一個配置文件當中引入另外一個配置文件

Spring屬性注入

構造方法的方式的屬性注入

Set方法的屬性注入

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


P名稱空間的屬性注入

使用p名稱空間,就不須要寫那那麼多的property
使用時,要添加名稱空間

xmlns:p="http://www.springframework.org/schema/p"

spEL表達式的屬性注入

集合類型屬性注入

數組

List集合

Set集合

Map集合

IOC註解方式快速入門

在spring4以後,想要使用註解形式,必須得要引入aop的包

在配置文件當中,還得要引入一個context約束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
</beans>

配置組件掃描

哪一個包下的類型使用組合掃描

在類開始位置上添加註解

使用註解注入屬性

  • 能夠不用提供set方法,直接在直接名上添加@value("值")
  • 若是提供了set方法,在set方法上添加@value("值");

IOC註解詳解

@Component

修改一個類,將這個類交給Spring管理  至關於在配置文件當中配置
<bean id=""  class="">

@Component三個衍生註解

爲了更好的進行分層,Spring可使用其它三個註解,功能相似
目前使用哪個功能都同樣, 後期可能會添加一些屬於各自的屬性

@Controller

​ web層

@Service

​ service層

@Repository

​ dao層

屬性注入

@Value

​ 設置普通屬性值

@Autowired

  • 設置對象類型的屬性值
  • 直接使用這種方式,是按照類型徹底屬性注入
  • 不須要在註解上使用id名稱

  • 習慣是按照名稱完成屬性注入
    必須讓@Autowired註解與@Qualifier一塊兒使用

單獨使用@Resource

@PostConstruct

​ 初始化方法

@PreDestroy

​ 銷燬方法

@scope

​ 做用範圍

XML與註解比較

  • XML能夠適用任何場景 ,結構清晰,維護方便
  • 註解不是本身提供的類使用不了,開發簡單方便

XML與註解整合開發

  • XML管理Bean
  • 註解完成屬性注入
  • 使用過程當中, 能夠不用掃描,掃描是爲了類上的註解
  • 在沒有掃描的狀況下, 使用屬性註解@Resource @Value @Autowired @Qulifier

<context:annotation-config/>
相關文章
相關標籤/搜索