多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > Spring(一)

Spring(一)

來源:程序員人生   發(fā)布時(shí)間:2016-06-04 16:11:00 閱讀次數(shù):2553次

回顧

Struts與Hibernate可以做甚么事?

Struts
    Mvc中控制層解決方案 
    可以進(jìn)行要求數(shù)據(jù)自動(dòng)封裝、類型轉(zhuǎn)換、文件上傳、效驗(yàn)…
Hibernate
    持久層的解決方案; 
    可以做到,
        把對(duì)象保存到數(shù)據(jù)庫, 
        從數(shù)據(jù)庫中取出的是對(duì)象。

傳統(tǒng)的開發(fā)模式

基于mvc模式進(jìn)行項(xiàng)目開發(fā);
基于mvc的項(xiàng)目框架結(jié)構(gòu):
    Entity / dao / service / action

    // 1. 實(shí)體類
    class User{
    }


    //2. dao
    class  UserDao{
       .. 訪問db
    }

    //3. service
    class  UserService{
        UserDao userDao = new UserDao();
    }

    //4. action
    class  UserAction{
        UserService userService = new UserService();

        ..
        拿到數(shù)據(jù)或結(jié)果
    }

    用戶訪問:
    /user.action ---->  Tomcat  (服務(wù)器創(chuàng)建Action、Service、dao

    思考:
        1. 對(duì)象創(chuàng)建創(chuàng)建能否寫死?
        2. 對(duì)象創(chuàng)建細(xì)節(jié)
            對(duì)象數(shù)量
                action  多個(gè)   【保護(hù)成員變量】
                service 1個(gè)   【不需要保護(hù)公共變量】
                dao     1個(gè)   【不需要保護(hù)公共變量】
            創(chuàng)建時(shí)間
                action    訪問時(shí)候創(chuàng)建
                service   啟動(dòng)時(shí)候創(chuàng)建
                dao       啟動(dòng)時(shí)候創(chuàng)建
        3. 對(duì)象的依賴關(guān)系
            action 依賴 service
            service依賴 dao

    =======================================================
    總結(jié):
        spring就是解決上面的問題的!
    簡(jiǎn)單來講,就是處理對(duì)象的創(chuàng)建的、和對(duì)象的依賴關(guān)系!

Spring框架

專業(yè)術(shù)語了解

組件/框架設(shè)計(jì)

侵入式設(shè)計(jì)
        引入了框架,對(duì)現(xiàn)有的類的結(jié)構(gòu)有影響;即需要實(shí)現(xiàn)或繼承某些特定類。
        例如: Struts框架
非侵入式設(shè)計(jì)
    引入了框架,對(duì)現(xiàn)有的類結(jié)構(gòu)沒有影響。
    例如:Hibernate框架 / Spring框架

控制反轉(zhuǎn)

Inversion on Control , 控制反轉(zhuǎn) IOC
對(duì)象的創(chuàng)建交給外部容器完成,這個(gè)就做控制反轉(zhuǎn).

依賴注入,  dependency injection 
    處理對(duì)象的依賴關(guān)系

區(qū)分:
     控制反轉(zhuǎn), 解決對(duì)象創(chuàng)建的問題 【對(duì)象創(chuàng)建交給他人】
     依賴注入,
        在創(chuàng)建完對(duì)象后, 對(duì)象的關(guān)系的處理就是依賴注入 【通過set方法依賴注入】

AOP

    面向切面編程。切面,簡(jiǎn)單來講來可以理解為1個(gè)類,由很多重復(fù)代碼構(gòu)成的類。
    切面舉例:事務(wù)、日志、權(quán)限;

概述

Spring框架,可以解決對(duì)象創(chuàng)建和對(duì)象之間依賴關(guān)系的1種框架。
      且可以和其他框架1起使用;Spring與Struts,  Spring與hibernate
     (起到整合(粘合)作用的1個(gè)框架)
Spring提供了1站式解決方案:
    1) Spring Core  spring的核心功能: IOC容器, 解決對(duì)象創(chuàng)建及依賴關(guān)系
    2) Spring Web  Spring對(duì)web模塊的支持。
                        -? 可以與struts整合,讓struts的action創(chuàng)建交給spring
                        -? spring mvc模式
    3) Spring DAO  Spring 對(duì)jdbc操作的支持  【JdbcTemplate模板工具類】
    4) Spring ORM  spring對(duì)orm的支持: 
                        ? 既可以與hibernate整合,【session】
                        ? 也能夠使用spring的對(duì)hibernate操作的封裝
    5)Spring AOP  切面編程
    6)SpringEE   spring 對(duì)javaEE其他模塊的支持

開發(fā)步驟

    spring各個(gè)版本中:
        在3.0以下的版本,源碼有spring中相干的所有包【spring功能 + 依賴包】如2.5版本;
        在3.0以上的版本,源碼中只有spring的核心功能包【沒有依賴包】
            (如果要用依賴包,需要單獨(dú)下載!)


    1) 源碼, jar文件:spring-framework⑶.2.5.RELEASE
        commons-logging⑴.1.3.jar             日志
        spring-beans⑶.2.5.RELEASE.jar        bean節(jié)點(diǎn)
        spring-context⑶.2.5.RELEASE.jar      spring上下文節(jié)點(diǎn)
        spring-core⑶.2.5.RELEASE.jar         spring核心功能
        spring-expression⑶.2.5.RELEASE.jar   spring表達(dá)式相干表

    以上是必須引入的5個(gè)jar文件,在項(xiàng)目中可以用戶庫管理!

    2) 核心配置文件: applicationContext.xml  
        Spring配置文件:applicationContext.xml / bean.xml

        束縛參考:
    spring-framework⑶.2.5.RELEASE\docs\spring-framework-reference\htmlsingle\index.html
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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>
    3) Api
public class App { // 1. 通過工廠類得到IOC容器創(chuàng)建的對(duì)象 @Test public void testIOC() throws Exception { // 創(chuàng)建對(duì)象 // User user = new User(); // 現(xiàn)在,把對(duì)象的創(chuàng)建交給spring的IOC容器 Resource resource = new ClassPathResource("cn/itcast/a_hello/applicationContext.xml"); // 創(chuàng)建容器對(duì)象(Bean的工廠), IOC容器 = 工廠類 + applicationContext.xml BeanFactory factory = new XmlBeanFactory(resource); // 得到容器創(chuàng)建的對(duì)象 User user = (User) factory.getBean("user"); System.out.println(user.getId()); } //2. (方便)直接得到IOC容器對(duì)象 @Test public void testAc() throws Exception { // 得到IOC容器對(duì)象 ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml"); // 從容器中獲得bean User user = (User) ac.getBean("user"); System.out.println(user); } }

bean對(duì)象創(chuàng)建的細(xì)節(jié)

/** * 1) 對(duì)象創(chuàng)建: 單例/多例 * scope="singleton", 默許值, 即 默許是單例 【service/dao/工具類】 * scope="prototype", 多例; 【Action對(duì)象】 * * 2) 甚么時(shí)候創(chuàng)建? * scope="prototype" 在用到對(duì)象的時(shí)候,才創(chuàng)建對(duì)象。 * scope="singleton" 在啟動(dòng)(容器初始化之前), 就已創(chuàng)建了bean,且全部利用只有1個(gè)。 * 3) 是不是延遲創(chuàng)建 * lazy-init="false" 默許為false, 不延遲創(chuàng)建,即在啟動(dòng)時(shí)候就創(chuàng)建對(duì)象 * lazy-init="true" 延遲初始化, 在用到對(duì)象的時(shí)候才創(chuàng)建對(duì)象 * (只對(duì)單例有效) * 4) 創(chuàng)建對(duì)象以后,初始化/燒毀 * init-method="init_user" 【對(duì)應(yīng)對(duì)象的init_user方法,在對(duì)象創(chuàng)建愛以后履行 】 * destroy-method="destroy_user" 【在調(diào)用容器對(duì)象的destriy方法時(shí)候履行,(容器用實(shí)現(xiàn)類)】 */ @Test public void testIOC() throws Exception { // 得到IOC容器對(duì)象 【用實(shí)現(xiàn)類,由于要調(diào)用燒毀的方法】 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml"); System.out.println("-----容器創(chuàng)建-----"); // 從容器中獲得bean User user1 = (User) ac.getBean("user"); User user2 = (User) ac.getBean("user"); System.out.println(user1); System.out.println(user2); // 燒毀容器對(duì)象 ac.destroy(); }

SpringIOC容器

創(chuàng)建對(duì)象

SpringIOC容器,是spring核心內(nèi)容。
作用: 創(chuàng)建對(duì)象 & 處理對(duì)象的依賴關(guān)系

IOC容器創(chuàng)建對(duì)象:
創(chuàng)建對(duì)象, 有幾種方式:
1) 調(diào)用無參數(shù)構(gòu)造器
2) 帶參數(shù)構(gòu)造器
3) 工廠創(chuàng)建對(duì)象
        工廠類,靜態(tài)方法創(chuàng)建對(duì)象
        工廠類,非靜態(tài)方法創(chuàng)建對(duì)象
<?xml version="1.0" encoding="UTF⑻"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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"> <!-- ###############對(duì)象創(chuàng)建############### --> <!-- 1. 默許無參數(shù)構(gòu)造器 <bean id="user1" class="cn.itcast.b_create_obj.User"></bean> --> <!-- 2. 帶參數(shù)構(gòu)造器 --> <bean id="user2" class="cn.itcast.b_create_obj.User"> <constructor-arg index="0" type="int" value="100"></constructor-arg> <constructor-arg index="1" type="java.lang.String" value="Jack"></constructor-arg> </bean> <!-- 定義1個(gè)字符串,值是"Jack" ; String s = new String("jack")--> <bean id="str" class="java.lang.String"> <constructor-arg value="Jacks"></constructor-arg> </bean> <bean id="user3" class="cn.itcast.b_create_obj.User"> <constructor-arg index="0" type="int" value="100"></constructor-arg> <constructor-arg index="1" type="java.lang.String" ref="str"></constructor-arg> </bean> <!-- 3. 工廠類創(chuàng)建對(duì)象 --> <!-- # 3.1 工廠類,實(shí)例方法 --> <!-- 先創(chuàng)建工廠 --> <bean id="factory" class="cn.itcast.b_create_obj.ObjectFactory"></bean> <!-- 在創(chuàng)建user對(duì)象,用factory方的實(shí)例方法 --> <bean id="user4" factory-bean="factory" factory-method="getInstance"></bean> <!-- # 3.2 工廠類: 靜態(tài)方法 --> <!-- class 指定的就是工廠類型 factory-method 1定是工廠里面的“靜態(tài)方法” --> <bean id="user" class="cn.itcast.b_create_obj.ObjectFactory" factory-method="getStaticInstance"></bean> </beans>

對(duì)象依賴關(guān)系

Spring中,如何給對(duì)象的屬性賦值?  【DI, 依賴注入】
    1) 通過構(gòu)造函數(shù)
    2) 通過set方法給屬性注入值
    3) p名稱空間
    4) 自動(dòng)裝配(了解)
    5) 注解

(經(jīng)常使用)Set方法注入值

<!-- dao instance --> <bean id="userDao" class="cn.itcast.c_property.UserDao"></bean> <!-- service instance --> <bean id="userService" class="cn.itcast.c_property.UserService"> <property name="userDao" ref="userDao"></property> </bean> <!-- action instance --> <bean id="userAction" class="cn.itcast.c_property.UserAction"> <property name="userService" ref="userService"></property> </bean>

內(nèi)部bean

<!-- ##############內(nèi)部bean############## --> <bean id="userAction" class="cn.itcast.c_property.UserAction"> <property name="userService"> <bean class="cn.itcast.c_property.UserService"> <property name="userDao"> <bean class="cn.itcast.c_property.UserDao"></bean> </property> </bean> </property> </bean>

p 名稱空間注入屬性值 (優(yōu)化)

<?xml version="1.0" encoding="UTF⑻"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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"> <!-- ###############對(duì)象屬性賦值############### --> <!-- 給對(duì)象屬性注入值: # p 名稱空間給對(duì)象的屬性注入值 (spring3.0以上版本才支持) --> <bean id="userDao" class="cn.itcast.c_property.UserDao"></bean> <bean id="userService" class="cn.itcast.c_property.UserService" p:userDao-ref="userDao"></bean> <bean id="userAction" class="cn.itcast.c_property.UserAction" p:userService-ref="userService"></bean> <!-- 傳統(tǒng)的注入: <bean id="user" class="cn.itcast.c_property.User" > <property name="name" value="xxx"></property> </bean> --> <!-- p名稱空間優(yōu)化后 --> <bean id="user" class="cn.itcast.c_property.User" p:name="Jack0001"></bean> </beans>

自動(dòng)裝配(了解)

1. 根據(jù)名稱自動(dòng)裝配:autowire="byName"
    自動(dòng)去IOC容器中找與屬性名同名的援用的對(duì)象,并自動(dòng)注入
<!-- ###############自動(dòng)裝配############### --> <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean> <bean id="userService" class="cn.itcast.d_auto.UserService" autowire="byName"></bean> <!-- 根據(jù)“名稱”自動(dòng)裝配: userAction注入的屬性,會(huì)去ioc容器中自動(dòng)查找與屬性同名的對(duì)象 --> <bean id="userAction" class="cn.itcast.d_auto.UserAction" autowire="byName"></bean>
    也能夠定義到全局, 這樣就不用每一個(gè)bean節(jié)點(diǎn)都去寫autowire=”byName”
<?xml version="1.0" encoding="UTF⑻"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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" default-autowire="byName"> 根據(jù)名稱自動(dòng)裝配(全局) <!-- ###############自動(dòng)裝配############### --> <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean> <bean id="userService" class="cn.itcast.d_auto.UserService"></bean> <bean id="userAction" class="cn.itcast.d_auto.UserAction"></bean> </beans>
2. 根據(jù)類型自動(dòng)裝配:autowire="byType"
    必須確保改類型在IOC容器中只有1個(gè)對(duì)象;否則報(bào)錯(cuò)。
<?xml version="1.0" encoding="UTF⑻"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 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" default-autowire="byType"> <!-- ###############自動(dòng)裝配############### --> <bean id="userDao" class="cn.itcast.d_auto.UserDao"></bean> <bean id="userService" class="cn.itcast.d_auto.UserService"></bean> <!-- 如果根據(jù)類型自動(dòng)裝配: 必須確保IOC容器中只有1個(gè)該類型的對(duì)象 --> <bean id="userAction" class="cn.itcast.d_auto.UserAction"></bean> <!-- 報(bào)錯(cuò): 由于上面已有1個(gè)該類型的對(duì)象,且使用了根據(jù)類型自動(dòng)裝配 <bean id="userService_test" class="cn.itcast.d_auto.UserService" autowire="byType"></bean> --> </beans>
總結(jié):
    Spring提供的自動(dòng)裝配主要是為了簡(jiǎn)化配置; 但是不利于后期的保護(hù)。
    (1般不推薦使用)

注解

注解方式可以簡(jiǎn)化spring的IOC容器的配置!

使用注解步驟:
    1)先引入context名稱空間
        xmlns:context="http://www.springframework.org/schema/context"
    2)開啟注解掃描
        <context:component-scan base-package="cn.itcast.e_anno2"></context:component-scan>
    3)使用注解
        通過注解的方式,把對(duì)象加入ioc容器。

       創(chuàng)建對(duì)象和處理對(duì)象依賴關(guān)系,相干的注解:
        @Component   指定把1個(gè)對(duì)象加入IOC容器

@Repository   作用同@Component; 在持久層使用
@Service      作用同@Component; 在業(yè)務(wù)邏輯層使用
@Controller    作用同@Component; 在控制層使用 

@Resource     屬性注入

總結(jié):
    1) 使用注解,可以簡(jiǎn)化配置,且可以把對(duì)象加入IOC容器,及處理依賴關(guān)系(DI)
    2) 注解可以和XML配置1起使用。

Spring與Struts框架整合

Spring,負(fù)責(zé)對(duì)象對(duì)象創(chuàng)建
Struts, 用Action處理要求

Spring與Struts框架整合,
    關(guān)鍵點(diǎn):讓struts框架action對(duì)象的創(chuàng)建,交給spring完成!

Spring與Hibernate整合:

【SSH整合:
        Spring與Struts
            關(guān)鍵點(diǎn): action交給spring創(chuàng)建!
        Spring與Hibernate
            關(guān)鍵點(diǎn): sessionFactory對(duì)象交給spring創(chuàng)建!
】

步驟:
    引入jar文件
        1)引入struts .jar相干文件
        2)spring-core  相干jar文件
        3)spring-web 支持jar包
            spring-web⑶.2.5.RELEASE.jar            【Spring源碼】
            struts2-spring-plugin⑵.3.4.1.jar       【Struts源碼】

    配置:
        4)配置XML
            struts.xml      【struts路徑與action映照配置】
            bean.xml        【spring ioc容器配置】
            web.xml         【核心過濾器: 引入struts功能】
                            【初始化spring的ioc容器】
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产区精品一区二区不卡中文 | 视频网站在线 | 福利在线看片 | 国产精品乱码一区二区三区 | 国产18到20岁美女毛片 | 中文字幕在线影院 | www.日本在线 | 波多野野结衣1区二区 | 亚洲欧美精选 | 国产精品亚洲高清一区二区 | 性欧美成人免费观看视 | 亚洲一区二区福利视频 | 国产精品久久久久无毒 | 伊人蕉| 日韩综合色 | 欧美极度另类精品 | 精品国产欧美一区二区最新 | 国产国产成人精品久久 | 一级做a爰片欧美一区 | 伊人不卡| 日韩国产欧美精品综合二区 | 久久久久久久久久久观看 | 欧美精品免费一区欧美久久优播 | 欧美黄色片免费观看 | 国产精品公开免费视频 | www日本com| 亚洲精品一二三区-久久 | 亚洲区在线播放 | 最近2019中文字幕免费大全8 | 久久亚洲美女久久久久 | 国产一区二区三区四区五区六区 | 亚洲最新黄色网址 | 巨大乳bbwsex欧美高清 | 中文字幕国产在线 | 欧美色欧美色 | 成人精品一区二区激情 | 亚洲三级大片 | a天堂v| 亚洲 自拍 另类 欧美 综合 | 乱码亚洲一区二区三区 | 日本一区二区免费看 |