天天看點

Spring架構

Spring架構

什麼是Spring

Spring是分層得javaSE輕量級開源架構,以IOC(Inverse of Control 控制反轉)和AOP(Aspect Oriented Programming面向切面程式設計為核心)

Spring是衆多優秀設計模式得組合(工廠,單例,代理,擴充卡,包裝器,觀察者)

分層:

JavaEE的三層結構:web層、業務層、資料通路層(持久層、內建層)

Struts是web層基于MVC設計模式架構

Mybatis,Hibernate是持久的一個ORM的架構

一站式:

Spring架構有對三層的每層解決方案

web層:Spring MVC

持久層:JDBC Template

業務層: Spring的Bean管理

Spring的好處:

友善解耦,簡化開發

Spring就是一個大工廠,可以将所有對象和依賴關系維護,交給Spring管理

AOP程式設計的支援

Spring提供面向切面程式設計,可以友善的實作對程式進行權限攔截、運作監控等功能

聲明式事務的支援

隻需要通過配置就可以完成對事務的管理,而無需手動程式設計

友善程式的測試

Spring對Junit4支援,可以通過注解友善的測試Spring程式

友善內建各種優秀架構 ​ Spring不排斥各種優秀的開源架構,其内部提供了對各種優秀架構(如:Struts、

Hibernate、MyBatis、Quartz等)的直接支援

Spring 對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠端調用等),都提供了封裝,降低JavaEE API的使用難度

1、建立Bean的三種方式

Bean元素:使用鈣元素描述需要Spring容器管理的對象

class屬性:被管理對象的完整類型名

name屬性:給被管理的對象起個名字,獲得對象時根據該名稱獲得對象

id屬性:與name屬性的作用相同

<?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">
    <!--使用預設的構造方法建立-->
<bean id="UserService" class="com.wm.impl.UserServiceimpl"></bean>
<!--使用普通的工廠中的方法建立對象-->           
<!--使用工廠中的靜态方法建立-->
<bean id="userService" factory-bean="userServiceFactory" factory-method="getUserService"></bean>           
</beans>
           

了解:

這三種建立的方式的各有特點,也都有相似的地方,最重要的是了解屬性的意思,id是指管理對象的名字,其實指的就是在我們測試的時候調用的對象的名字,

class是我們被管理對象的名字,也就是我們new的類,其中factory-bean 是指靜态方法中的類名,factory-method見名知意指的是這個類下的方法,然後後期在測試的時候就可以通過id名直接進行類的執行個體化,不用再new對象,這也是我們使用Spring架構的意義!!!

2、Spring中的依賴注入

依賴注入: 能注入的資料: 基本類型和String 其他bean類型(在配置檔案中或者注解配置過的bean) 複雜類型/集合類型

注入的方式:

第一種:使用構造函數提供

第二種:使用set方法提供

第三種:使用注解提供
           

構造方法注入

使用的标簽:constructor-arg 标簽出現的位置:bean标簽的内部

标簽中的屬性: type:用于指定要注入的資料的資料類型,該資料類型也是構造函數中某個或某些參數的類型 index:用于指定要注入的資料給構造函數中指定索引位置的參數指派。索引的位置是從0開始 name:用于指定給構造函數中指定名稱的參數指派

value:用于提供基本類型和String類型的資料 ref:用于指定其他的bean類型資料。它指的就是在spring的Ioc核心容器中出現過的bean對象

優勢: 在擷取bean對象時,注入資料是必須的操作,否則對象無法建立成功。 弊端: 改變了bean對象的執行個體化方式,使我們在建立對象時,如果用不到這些資料,也必須提供。

set方法注入

涉及的标簽:property 出現的位置:bean标簽的内部

标簽的屬性: name:用于指定注入時所調用的set方法名稱 value:用于提供基本類型和String類型的資料 ref:用于指定其他的bean類型資料。它指的就是在spring的Ioc核心容器中出現過的bean對象

優勢: 建立對象時沒有明确的限制,可以直接使用預設構造函數 弊端: 如果有某個成員必須有值,則擷取對象是有可能set方法沒有執行。

複雜類型的注入

list array set map propertioes等結構集合的注入

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">           
<property name="cname" value="法拉利"></property>           
<property name="id" value="1002"></property>
    <property name="name" value="rose"></property>
    <property name="password" value="123"></property>
    <property name="car" ref="carBean" ></property>           
<bean id="collectionDemo" class="com.wm.pojo.CollectionDemo">
            <!--數組-->
                <property name="arr">
                    <array>
                            <value>123</value>
                            <value>213</value>
                            <value>123</value>
                    </array>
                </property>
    <property name="list" >
            <!--list集合 有序可重複-->
            <list>
                    <value>jack</value>
                    <value>jak</value>
                    <value>tom</value>
                    <ref bean="user"></ref>
            </list>
    </property>
            <property name="set">
                    <!--set集合 無序不可重複-->
                    <set>
                    <value>jack</value>
                    <value>jak</value>
                    <value>tom</value>
                    <ref bean="user"></ref>
                    </set>
            </property>
            <property name="map">
                    <!--map集合是以鍵值對得形式存儲-->
                    <map>
                          <entry key="username" value="jack"></entry>
                            <entry key-ref="user" value-ref="user"></entry>
                    </map>
            </property>
            <property name="properties">
                    <!--properties類對象-->
                    <props>
                            <prop key="username">root</prop>
                            <prop key="password">123456</prop>
                            <prop key="url">jdbc:mysql:///db_name</prop>
                            <prop key="DriverClassName">com.mysql.cj.jdbc.driver</prop>
                    </props>
            </property>
    </bean>           

最後題詩一首

秋名山上行人稀

                    幾輛賽車較高低

                    當年車技今猶在

                    不見當年老司機