成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring筆記01_下載_概述_監(jiān)聽器

reclay / 652人閱讀

摘要:簡(jiǎn)單來說,是一個(gè)輕量級(jí)的控制反轉(zhuǎn)和面向切面的容器框架。變成的支持提供面向切面編程,可以方便的實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截,運(yùn)行監(jiān)控等功能。用于反射創(chuàng)建對(duì)象,默認(rèn)情況下調(diào)用無參構(gòu)造函數(shù)。指定對(duì)象的作用范圍。

1.Spring介紹 1.1 Spring概述

Spring是一個(gè)開源框架,Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開發(fā)框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。簡(jiǎn)單來說,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

1.2 Spring好處

方便解耦,簡(jiǎn)化開發(fā)

Spring就是一個(gè)大工廠,專門負(fù)責(zé)生成Bean,可以將所有對(duì)象創(chuàng)建和依賴關(guān)系維護(hù)由Spring管理。通過Spring提供的IoC容器,可以將對(duì)象間的依賴關(guān)系交由Spring進(jìn)行控制,避免硬編碼所造成的過度程序耦合。用戶也不必再為單例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注于上層的應(yīng)用。

AOP變成的支持

Spring提供面向切面編程,可以方便的實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截,運(yùn)行監(jiān)控等功能。通過Spring的AOP功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP實(shí)現(xiàn)的功能可以通過AOP輕松應(yīng)付。

聲明式事務(wù)的支持

只需要通過配置就可以完成對(duì)事務(wù)的管理,而無需手動(dòng)編程

方便程序的測(cè)試

Spring對(duì)Junit4支持,可以通過注解方便的測(cè)試Spring程序

方便集成各種優(yōu)秀框架

Spring不排斥各種優(yōu)秀的開源框架,其內(nèi)部提供了對(duì)各種優(yōu)秀框架的支持,如Struts、Hibernate、Mybatis、Quartz等

降低JavaEE API的使用難度

對(duì)JavaEE開發(fā)中一些難用的API(JDBC、JavaMail、遠(yuǎn)程調(diào)用等),都提供了封裝,使這些API應(yīng)用難度大大降低

Java源碼是經(jīng)典學(xué)習(xí)范例

Spring的源代碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對(duì)Java設(shè)計(jì)模式靈活運(yùn)用以及對(duì)Java技術(shù)的高深造詣。它的源代碼無意是Java技術(shù)的最佳實(shí)踐的范例。

1.3 Spring結(jié)構(gòu)體系

Spring框架是一個(gè)分層架構(gòu),它包含一系列的功能要素并被分為大約20個(gè)模塊。這些模塊分為Core Container、DataAccess/Integration、Web、AOP、Instrumentation和測(cè)試部分。如下圖所示:

1.4 在項(xiàng)目中的架構(gòu)

web層:Struts,SpringMVC

dao層:Hibernate,Mybatis

1.5 程序的耦合和解耦

程序的耦合

我們開發(fā)種,會(huì)寫很多的類,而有些類之間不可避免地產(chǎn)生依賴關(guān)系,這種依賴關(guān)系稱為耦合。有些依賴是必須的,有些依賴關(guān)系可以通過優(yōu)化代碼來解除。比如:

/**
 * 客戶的業(yè)務(wù)層實(shí)現(xiàn)類
 */
public class CustomerServiceImpl implements ICustomerService {
    
    private ICustomerDao customerDao = new CustomerDaoImpl();    
}

上面的代碼表示:業(yè)務(wù)調(diào)用持久層,并且此時(shí)業(yè)務(wù)再依賴持久層的接口和實(shí)現(xiàn)類。如果此時(shí)沒有持久層實(shí)現(xiàn)類,編譯將不能通過。這種依賴關(guān)系就是我們可以通過優(yōu)化代碼解決的。

再比如:下面的代碼種,我們的類依賴MySQL的具體驅(qū)動(dòng)類,如果這獅虎更換了數(shù)據(jù)庫(kù)品牌,我們需要改源碼來修修改數(shù)據(jù)庫(kù)驅(qū)動(dòng),這顯然不是我們想要的。

public class JdbcDemo1 {
    
    /**
     * JDBC操作數(shù)據(jù)庫(kù)的基本入門中存在什么問題?
     *       導(dǎo)致驅(qū)動(dòng)注冊(cè)兩次是個(gè)問題,但不是嚴(yán)重的。
     *       嚴(yán)重的問題:是當(dāng)前類和mysql的驅(qū)動(dòng)類有很強(qiáng)的依賴關(guān)系。
     *                  當(dāng)我們沒有驅(qū)動(dòng)類的時(shí)候,連編譯都不讓。
     * 那這種依賴關(guān)系,就叫做程序的耦合
     * 
     * 我們?cè)陂_發(fā)中,理想的狀態(tài)應(yīng)該是:
     *       我們應(yīng)該盡力達(dá)到的:編譯時(shí)不依賴,運(yùn)行時(shí)才依賴。
     *      
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        //1.注冊(cè)驅(qū)動(dòng)
        //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        Class.forName("com.mysql.jdbc.Driver");
        //2.獲取連接
        //3.獲取預(yù)處理sql語(yǔ)句對(duì)象
        //4.獲取結(jié)果集
        //5.遍歷結(jié)果集
    }

解決程序耦合的思路

在JDBC種是通過反射來注冊(cè)驅(qū)動(dòng)的,代碼如下:

Clas.forName("com.mysql.jdbc.Driver");

這時(shí)的好處是,我們類中不再依賴具體的驅(qū)動(dòng)類,此時(shí)就算刪除MySQL的驅(qū)動(dòng)jar包,依然可以編譯。但是沒有驅(qū)動(dòng)類,所以不能運(yùn)行。

不過,此處也有一個(gè)問題,就是我們反射類對(duì)象的全限定類名字符串是在Java類中寫死的,一旦要改還是徐婭修改源碼。為了解決這個(gè)問題,使用配置文件配置。

工廠模式解耦

在實(shí)際開發(fā)過程總我們把所有的dao和service和action對(duì)象使用配置文件配置起來,當(dāng)啟動(dòng)服務(wù)器應(yīng)用加載的時(shí)候,通過讀取配置文件,把這些對(duì)象創(chuàng)建出來并存起來。在接下來使用的時(shí)候,直接拿就好了。

控制反轉(zhuǎn)---Inversion Of Control

上面解耦的思路有兩個(gè)問題

創(chuàng)建的對(duì)象存儲(chǔ)在哪里?由于我們是很多對(duì)象,肯定要找個(gè)集合來存儲(chǔ),這時(shí)候有Map和List供選擇。到底是選擇Map還是List就看我們有沒有查找的需求。有查找的需求就選Map。所以我們的答案是:在應(yīng)用加載時(shí),創(chuàng)建一個(gè)Map,用于存放action,service和dao對(duì)象。

還是沒解釋什么是工廠?工廠就是負(fù)責(zé)給我們從容器中獲取指定對(duì)象的類。這時(shí)候獲取對(duì)象的方式發(fā)生了改變。以前,我們?cè)讷@取對(duì)象的時(shí)候,都是采用new的方式,是主動(dòng)的。

現(xiàn)在,我么獲取對(duì)象的時(shí)候,同時(shí)跟工廠要,有工廠為我們查找或者創(chuàng)建對(duì)象。是被動(dòng)的。這種被動(dòng)接收的方式獲取對(duì)象的思想就是控制反轉(zhuǎn),他是Spring框架的核心之一。其作用只有一個(gè):降低計(jì)算機(jī)程序的耦合。

2. Spring快速入門

使用spring的IOC解決程序耦合

2.1 編寫流程

下載Spring開發(fā)包

導(dǎo)入Spring的jar包

配置Spring的核心xml文件

在程序中讀取Spring的配置文件來獲取Bean【Bean其實(shí)就是一個(gè)new好的對(duì)象】

2.2 下載地址

這里下載4.2.4版本

地址:http://repo.spring.io/release...

官網(wǎng):spring.io 官網(wǎng)改版后,下載鏈接需要在對(duì)應(yīng)的GitHub上找

2.3 Spring的核心jar包

spring-core-4.2.4.RELEASE.jar包含Spring框架基本的核心工具類,Spring其他組件都要使用到這個(gè)包里得嘞,是其他組件的基本核心。

spring-beans-4.2.4.RELEASE.jar所有應(yīng)用都要用到的,它包含訪問配置文件、創(chuàng)建和管理bean

以及進(jìn)行Inversion of Control(IoC) / Dependency Injection(DI)操作相關(guān)的所有類。

spring-context-4.2.4.RELEASE.jarSpring提供在基礎(chǔ)IoC功能上的擴(kuò)展服務(wù),此外還提供許多企業(yè)級(jí)服務(wù)的支持,

如郵件服務(wù)、任務(wù)調(diào)度、JNDI定位、EJB集成、遠(yuǎn)程訪問、緩存以及各種視圖層框架的封裝等。

spring-expression-4.2.4.RELEASE.jarSpring表達(dá)式語(yǔ)言。

com.springsource.org.apache.commons.logging-1.1.1.jar第三方的主要用于處理日志。

2.4 Spring入門案例

準(zhǔn)備項(xiàng)目需要得jar包

spring-framework-4.2.4.RELEASE-dist.zip 【Spring的核心包】

spring-framework-4.2.4.RELEASE-dependencies.zip 【Spring的依賴包】

創(chuàng)建Project,導(dǎo)入Spring的jar包

在src路徑下創(chuàng)建applicationContext.xml文件

導(dǎo)入約束

把資源交給Spring管理,在xml文件中配置User




    
    
    

測(cè)試

package com.itzhouq.domain;

public class User {
    public void run() {
        System.out.println("run");
    }

}
package com.itzhouq.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.itzhouq.domain.User;

public class UserTeset {
    
    @Test
    public void test() {//自己new的對(duì)象
        User user = new User();
        user.run();
    }
    
    @Test
    public void test2() {//spring的ioc創(chuàng)建對(duì)象
        //加載配置文件  src/classes類路徑
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //找Spring要對(duì)象
        User user = (User) context.getBean("user");
        user.run();
    }
}

3. Spring基于XML的IOC細(xì)節(jié) 3.1 IOC中bean標(biāo)簽和管理對(duì)象細(xì)節(jié) 3.1.1 配置文件bean標(biāo)簽

作用

用于配置對(duì)象讓Spring來創(chuàng)建的。默認(rèn)情況下它調(diào)用的是類中的無參構(gòu)造函數(shù)。如果沒有無參構(gòu)造函數(shù)則不能創(chuàng)建成功。

屬性

id:給對(duì)象在容器中提供一個(gè)唯一標(biāo)識(shí),用于獲取對(duì)象

class:指定類的全限定名。用于反射創(chuàng)建對(duì)象,默認(rèn)情況下調(diào)用無參構(gòu)造函數(shù)。

scope:指定對(duì)象的作用范圍。

init-method:指定類中的初始化方法名稱。

destroy-method:指定類中銷毀方法名稱。

import:導(dǎo)入外部配置文件,resource----外部配置文件的地址。

3.1.2 scope屬性:范圍(重點(diǎn))

singleton: 單實(shí)例 默認(rèn)值

如果是單實(shí)例,配置文件文件只要一加載 就會(huì)創(chuàng)建對(duì)象 放在spring容器 (map)

當(dāng)所有人過來問spring容器要的時(shí)候(getBean),所用人用的都是同一個(gè)對(duì)象

prototype: 多實(shí)例

如果是多實(shí)例,配置文件加載,不創(chuàng)建對(duì)象

當(dāng)每個(gè)人過來getbean的時(shí)候,getbean一次創(chuàng)建一次 放在容器中

什么時(shí)候用默認(rèn)值singleton(單實(shí)例)? 什么時(shí)候用prototype(多實(shí)例)?

action: prototype

service/dao: singleton

request:web項(xiàng)目中Spring創(chuàng)建一個(gè)Bean對(duì)象,將對(duì)象存入到request域中

session:web項(xiàng)目中Spring創(chuàng)建一個(gè)Bean對(duì)象,將對(duì)象存入到session域中。

globalSession:web項(xiàng)目中,應(yīng)用在Portlet環(huán)境,如果沒有Portlet環(huán)境那么globalSession相當(dāng)于session。

3.1.3 bean的作用范圍和生命周期

單例對(duì)象:scope="singleton"

一個(gè)應(yīng)用只有一個(gè)對(duì)象的實(shí)例。它的作用范圍就是整個(gè)引用。

生命周期:

對(duì)象出生:當(dāng)應(yīng)用加載,創(chuàng)建容器時(shí),對(duì)象就被創(chuàng)建了。

對(duì)象活著:只要容器在,對(duì)象一直活著。

對(duì)象死亡:當(dāng)應(yīng)用卸載,銷毀容器時(shí),對(duì)象就被銷毀了。

多例對(duì)象:scope="prototype"

每次訪問對(duì)象時(shí),都會(huì)重新創(chuàng)建對(duì)象實(shí)例。

生命周期:

對(duì)象出生:當(dāng)使用對(duì)象時(shí),創(chuàng)建新的對(duì)象實(shí)例。

對(duì)象活著:只要對(duì)象在使用中,就一直活著。

對(duì)象死亡:當(dāng)對(duì)象長(zhǎng)時(shí)間不用時(shí),被java的垃圾回收器回收了。

3.1.4 示例化Bean的三種方式

無參構(gòu)造方式(最常用)

@Test//測(cè)試bean的三種創(chuàng)建方式------無參構(gòu)造方式
    public void test3() {
        //加載配置文件  src/classes類路徑
        ApplicationContext context = new         ClassPathXmlApplicationContext("applicationContext.xml");
        //找Spring要對(duì)象
        User user = (User) context.getBean("user");
        user.run();
    }

靜態(tài)工廠方式(了解)

條件:需要有一個(gè)工廠類,在這個(gè)工廠類中還需要一個(gè)靜態(tài)方法

package com.itzhouq.utils;

import com.itzhouq.domain.User;

public class BeanFactory {
    
    public static User createUser() {
        return new User();
    }

}

    

測(cè)試

@Test//測(cè)試bean的三種創(chuàng)建方式------靜態(tài)工廠方式
    public void test4() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user1 = (User) context.getBean("user");
        System.out.println(user1);//com.itzhouq.domain.User@5f3a4b84
        User user2 = (User) context.getBean("user");
        System.out.println(user2);//com.itzhouq.domain.User@5f3a4b84
    }

實(shí)例工廠方式(了解)

條件:需要一個(gè)工廠類在這個(gè)工廠類中需要一個(gè)普通方法

package com.itzhouq.utils;

import com.itzhouq.domain.User;

public class BeanFactory {
    
//    public static User createUser() {
//        return new User();
//    }
    
    //普通方法----實(shí)例工廠
    public User createUser() {
        return new User();
    }
}

配置文件


   
   

測(cè)試

@Test//測(cè)試bean的三種創(chuàng)建方式------實(shí)例工廠方式
    public void test5() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user1 = (User) context.getBean("user");
        System.out.println(user1);//com.itzhouq.domain.User@5f3a4b84
        User user2 = (User) context.getBean("user");
        System.out.println(user2);//com.itzhouq.domain.User@5f3a4b84
    } 

3.2 加載Spring容器的三種方式

類路徑獲得配置文件

文件系統(tǒng)路徑獲得配置文件

使用BeanFactory(了解)

public class Lession01 {

    @Test
    public void test01(){
        //Spring容器加載有3種方式
        //第一種:ClassPathXmlApplicationContext    ClassPath類路徑加載:指的就是classes路徑
        //最常用,Spring的配置文件以后就放在src路徑下
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        //第二種方式:文件系統(tǒng)路徑獲得配置文件【絕對(duì)路徑】
        ApplicationContext context = new FileSystemXmlApplicationContext("E:workspacesIdeaProjectSpring-day02-gyfsrceans.xml");

        IUserService user = (IUserService) context.getBean("userService");
        user.add();

        //第三種方式:
        String path = "E:workspacesIdeaProjectSpring-day02-gyfsrceans.xml";
        BeanFactory factory = new XmlBeanFactory(new FileSystemResource(path));
        IUserService user1 = (IUserService) factory.getBean("userService");
        user1.add();
    }
}

Spring內(nèi)部創(chuàng)建對(duì)象的原理

1. 解析xml文件,獲得類名,id,屬性
2. 通過反射,用類型創(chuàng)建對(duì)象
3. 給創(chuàng)建的對(duì)象賦值
3.3 BeanFactory和ApplicationContext對(duì)比

BeanFactory采用延遲加載,第一次getBean時(shí)才會(huì)初始化Bean

ApplicationContext是對(duì)BeanFactory擴(kuò)展,提供了更多功能

國(guó)際化處理

事件傳遞

Bean自動(dòng)裝配

各種不同應(yīng)用的Context實(shí)現(xiàn)

3. 4 Spring的依賴注入DI

DI屬性的依賴注入,是Spring框架核心IoC的具體實(shí)現(xiàn)方式。Spring在通過Ioc創(chuàng)建對(duì)象的時(shí)候,如果這個(gè)對(duì)象還有屬性,就一并賦值進(jìn)去,而不用我們自己去獲取。

入門舉例:

創(chuàng)建一個(gè)接口Car

package com.itzhouq.service;

public interface Car {
    public void run();
}

創(chuàng)建實(shí)現(xiàn)類CarImpl

package com.itzhouq.serviceImpl;

import com.itzhouq.service.Car;

public class CarImpl implements Car {
    private String name;
    
    public void setName(String name) {
        this.name = name;
    }


    @Override
    public void run() {
        System.out.println(name+"車跑起來了.....");
    }
}

測(cè)試

package com.itzhouq.test;
import org.junit.Test;
import com.itzhouq.serviceImpl.CarImpl;
public class CarTest {    
    @Test//自己new對(duì)象 自己屬性賦值的方式
    public void test() {
        CarImpl car = new CarImpl();
        car.setName("qq");
        car.run();//qq車跑起來了.....
    }
}

入門舉例2:依賴注入的方式

配置文件:


   
           
            
   

測(cè)試

@Test   //Spring的IOC
    public void test2() {
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        Car car = (Car)context.getBean("car");
        //把這個(gè)對(duì)象的屬性也在創(chuàng)建的時(shí)候給順便賦值了-----DI
        car.run();//蘭博基尼車跑起來了.....
    }

依賴注入的方式

構(gòu)造函數(shù)注入(了解)

set方法注入(掌握)

使用p名稱空間注入數(shù)據(jù)(本質(zhì)還是調(diào)用set方法)(了解)

注入集合屬性

3.4.1 構(gòu)造器注入方式

條件:需要有有參構(gòu)造方法

給CarImpl設(shè)置有參構(gòu)造

package com.itzhouq.serviceImpl;

import com.itzhouq.service.Car;

public class CarImpl implements Car {
    private String name;
    private double price;
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getName() {
        return name;
    }
    public CarImpl() {}
    //有參的構(gòu)造方法----DI的構(gòu)造器注入方式
    public CarImpl(String name, double price) {
        super();
        this.name = name;
        this.price = price;
    }
    @Override
    public void run() {
        System.out.println("價(jià)值"+price+"的"+name+"車跑起來了.....");
    }
}

配置文件


   
           
           
   

測(cè)試

@Test   //Spring的DI注入方式----構(gòu)造器的注入方式(了解)
    public void test3() {
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        Car car = (Car)context.getBean("car");
        car.run();//價(jià)值1000000.0的BMW車跑起來了.....
    }

3.4.2 set方式注入

寫一個(gè)Person接口

package com.itzhouq.service;

public interface Person {
}

PersonImpl實(shí)現(xiàn)接口Person,設(shè)置set方法

package com.itzhouq.serviceImpl;

import com.itzhouq.service.Car;
import com.itzhouq.service.Person;

public class PersonImpl implements Person {
    private String name;
    private Car car;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Car getCar() {
        return car;
    }
    public void setCar(Car car) {
        this.car = car;
    }
    @Override
    public String toString() {
        return "PersonImpl [name=" + name + ", car=" + car + "]";
    }
}

配置文件


           
           
   
   
   
   
           
           
   

測(cè)試

@Test   //Spring的DI注入方式----set的注入方式(了解)
    public void test4() {
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        Person person = (Person) context.getBean("person");
        System.out.println(person);
        //PersonImpl [name=jack, car=CarImpl [name=BMW, price=1000000.0]]
    }

3.4.3 使用p名稱空間注入數(shù)據(jù)(知道就OK)

此種方式是通過在xml中導(dǎo)入p名稱空間,使用p:propertyName來注入數(shù)據(jù),它的本質(zhì)仍然是調(diào)用類中的set方法實(shí)現(xiàn)注入功能。

配置文件


                               
    

3.4.4 注入集合屬性

顧名思義,就是給類中的集合成員傳值,它用的也是set方法注入的方式,只不過變量的數(shù)據(jù)類型都是集合。我們這里介紹注入數(shù)組,List,Set,Map,Properties。

創(chuàng)建一個(gè)類CollBean,設(shè)置set方法

package com.itzhouq.domain;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;


public class CollBean {
    private String[] ss;
    private List ll;
    private Map mm;
    private Properties properties;
    public String[] getSs() {
        return ss;
    }
    public void setSs(String[] ss) {
        this.ss = ss;
    }
    public List getLl() {
        return ll;
    }
    public void setLl(List ll) {
        this.ll = ll;
    }
    public Map getMm() {
        return mm;
    }
    public void setMm(Map mm) {
        this.mm = mm;
    }
    public Properties getProperties() {
        return properties;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    @Override
    public String toString() {
        return "CollBean [ss=" + Arrays.toString(ss) + ", ll=" + ll + ", mm=" + mm + ", properties=" + properties + "]";
    }

}

配置文件


           
           
   
   
   
           
               
               
                   aaa
                   bbb
                   ccc
               
           
           
               
               
                   111
                   222
                   
               
           
           
               
               
                   
                   
                   
               
           
           
               
               
                   root
                   1234
               
           
   

測(cè)試

      package com.itzhouq.test;
      
      import org.junit.Test;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import com.itzhouq.domain.CollBean;
      
      public class CollBeanTest {
          @Test
          public void test() {
              ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
              CollBean cb = (CollBean) context.getBean("collBean");
              System.out.println(cb);
              /*
               * CollBean [ss=[aaa, bbb, ccc], 
               * ll=[111, 222, CarImpl [name=BMW, price=1000000.0]],
               *  mm={k1=AAA, k2=BBB, k3=CarImpl [name=BMW, price=1000000.0]}, 
               *  properties={hibernate.password=1234, hibernate.username=root}]
               */
          }
      }
4.使用案例

需求分析:從service層調(diào)用dao層,將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù),存儲(chǔ)數(shù)據(jù)的過程使用syso模擬一下就可以。

創(chuàng)建工程,導(dǎo)入需要的jar包,建包如下:

創(chuàng)建dao層和dao實(shí)現(xiàn)層

package com.itzhouq.dao;

public interface UserDao {
    void save();
}
package com.itzhouq.daoImpl;

import com.itzhouq.dao.UserDao;

public class UserDaoImpl implements UserDao{

    @Override
    public void save() {
        System.out.println("操作數(shù)據(jù)庫(kù),保存用戶的數(shù)據(jù)");    
    }
}

創(chuàng)建Service層和實(shí)現(xiàn)層

package com.itzhouq.service;

public interface UserService {
    public void save();
}
package com.itzhouq.serviceImpl;

import com.itzhouq.dao.UserDao;
import com.itzhouq.daoImpl.UserDaoImpl;
import com.itzhouq.service.UserService;

public class UserServiceImpl implements UserService {
    private String name;
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void save() {
        System.out.println(name);
        //調(diào)用dao
        userDao.save();
    }
}

給UserDaoImpl一個(gè)UserDao屬性

配置文件



    
    
    
    
    
        
        
    

測(cè)試

@Test    //使用Spring的IOC+DI來實(shí)現(xiàn)對(duì)象的創(chuàng)建和賦值
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) context.getBean("UserService");
        userService.save();
        //要開始訪問dao了
        //操作數(shù)據(jù)庫(kù),保存用戶的數(shù)據(jù)
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74363.html

相關(guān)文章

  • Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師(全網(wǎng)最強(qiáng))

    摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁(yè)左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...

    Scorpion 評(píng)論0 收藏0
  • springboot實(shí)踐筆記之一:springboot+sharding-jdbc+mybatis全

    摘要:現(xiàn)在的分片策略是上海深圳分別建庫(kù),每個(gè)庫(kù)都存各自交易所的兩支股票的,且按照月分表。五配置分片策略數(shù)據(jù)庫(kù)分片策略在這個(gè)實(shí)例中,數(shù)據(jù)庫(kù)的分庫(kù)就是根據(jù)上海和深圳來分的,在中是單鍵分片。 由于當(dāng)當(dāng)發(fā)布了最新的Sharding-Sphere,所以本文已經(jīng)過時(shí),不日將推出新的版本 項(xiàng)目中遇到了分庫(kù)分表的問題,找到了shrding-jdbc,于是就搞了一個(gè)springboot+sharding-jd...

    Snailclimb 評(píng)論0 收藏0
  • skyeye-OA管理系統(tǒng)

    摘要:項(xiàng)目介紹風(fēng)格的一套系統(tǒng),前端采用作為前端框架,后端采用作為服務(wù)框架,采用自封裝的對(duì)所有請(qǐng)求進(jìn)行參數(shù)校驗(yàn),以保證接口安全性。 skyeye 項(xiàng)目介紹 win10風(fēng)格的一套系統(tǒng),前端采用layui作為前端框架,后端采用SpringBoot作為服務(wù)框架,采用自封裝的xml對(duì)所有請(qǐng)求進(jìn)行參數(shù)校驗(yàn),以保證接口安全性。 項(xiàng)目地址:https://gitee.com/doc_wei01_a...該項(xiàng)...

    yck 評(píng)論0 收藏0
  • 慕課網(wǎng)_《ElasticSearch入門》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期四說明本文部分內(nèi)容均來自慕課網(wǎng)。那么里面的數(shù)據(jù)就可以分為各種各樣的索引,比如汽車索引圖書索引家具索引等等。圖書索引又可以細(xì)分為各種類型,比如科普類小說類技術(shù)類等等。具體到每一本書籍,就是文檔,就是整個(gè)圖書里面最小的存儲(chǔ)單位。 時(shí)間:2017年09月14日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https...

    notebin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<