Java學習之Spring框架入門篇


Java學習之Spring框架入門篇

0x00 前言

最近在學SSM的三大框架,上篇文章,已經更新了Mybatis的相關內容,那么這篇文章就來寫寫Spring的入門。

0x01 Spring 概述

Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。

它是為了解決企業應用開發的復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。

Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。Spring的核心是控制反轉(IoC)和面向切面(AOP)。

0x02 Spring使用的意義

首先我們來看一段代碼。

dao接口:

package com.test.dao;
public interface userdao {
    void select();
}

mysqldaoimpl:

package com.test.dao;

public class mysqldaoimpl implements userdao{
    public void select() {
        System.out.println("mysqldaoimpl");
    }
}


mssqldaodimpl:

package com.test.dao;

public class mssqldaoimpl implements userdao {
    public void select() {
        System.out.println("mssqlselect ");
    }
}

test類:

package com.test.domain;

import com.test.dao.mysqldaoimpl;
import com.test.dao.userdao;

public class test1 {
    public static void main(String[] args) {
        userdao mysqldaoimpl = new mysqldaoimpl();
        mysqldaoimpl.select();
    }
}

具體的實現就不寫了,這里只是演示一下區別。

這里寫了一個接口代表某一個查詢方法,然后寫了2個實現類,分別是mysql的連接和mssql的連接查詢。

我們可以注意到,我們在test類里面想要調用mysql的方法就直接new了一個實現類的對象,那么如果在后面想要mssql的查詢的話,就需要修改代碼,這樣的代碼效率不高,而且在后面代碼如果多了也不好改了。而且這樣寫的話控制權全在開發者手里,而不是在用戶的手里,要實現什么樣的功能控制權應該是在用戶手里,而不是開發者手里。

那么這里就可以用到 Spring框架,來實現。雖然是也有其他辦法能解決這個問題,但是實現起來代碼比較繁瑣,那么我們為什么不用更加簡單便捷的方法呢?

0x03 Spring 使用

首先也還是配置一下spring的坐標。

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>

配置完成后,就來配置一下我們的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">
    <bean id="mysqldaoimpl" class="com.test.dao.mysqldaoimpl"/>

    <bean id="mssqldaoimpl" class="com.test.dao.mssqldaoimpl"/>


</beans>

test類:

package com.test.domain;


import com.test.dao.userdao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test1 {
    public static void main(String[] args) {
         ApplicationContext cl = new ClassPathXmlApplicationContext("bean.xml");  //傳入xml文件
        userdao mysqldaoimpl = (userdao)cl.getBean("mysqldaoimpl");  //獲取mysqldaoimpl方法
        mysqldaoimpl.select();//調用mysqldaoimpl方法
    }
}

配置並直接傳入xml文件,並獲取一下方法,就可以直接來調用方法就可以使用了。無需在new實現類的實例化對象。

Bean標簽詳解:

作用:

用於配置對象讓 spring 來創建的。

默認情況下它調用的是類中的無參構造函數。如果沒有無參構造函數則不能創建成功。

屬性:
id: 給對象在容器中提供一個唯一標識。用於獲取對象。

class: 指定類的全限定類名。用於反射創建對象。默認情況下調用無參構造函數。

*scope: 指定對象的作用范圍。
* singleton :默認值,單例的.
* prototype :多例的.
* request :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 request 域中.
* session :WEB 項目中,Spring 創建一個 Bean 的對象,將對象存入到 session 域中.
* global session :WEB 項目中,應用在 Portlet 環境.如果沒有 Portlet 環境那么
*globalSession 相當於 session.
*init-method: 指定類中的初始化方法名稱。
*destroy-method: 指定類中銷毀方法名稱。

0X04 依賴注入

bean對象的創建來於容器,bean對象中的所有屬性,都有容器來注入。下面來看看常用的幾種注入方式

構造注入

構造注入:顧名思義,就是使用類中的構造函數,給成員變量賦值。注意,賦值的操作不是我們自己做的,而是通過配置
的方式,讓 spring 框架來為我們注入。

首先定義一個實體類:

package com.test.doamin;


import java.util.Date;

public class Perpon {
    private String name;
    private Integer age;

    public Perpon() {
    }

    @Override
    public String toString() {
        return "Perpon{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", date=" + date +
                '}';
    }

    public Perpon(String name, Integer age, Date date) {
        this.name = name;
        this.age = age;
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    private Date date;

}

在平時我們都是直接在new的時候,或者是使用set方式對他進行賦值,那么在spring框架下,只需要配置一下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">

    <bean id="person" class="com.test.doamin.Perpon">

    <constructor-arg name="name" value="xiaoming"/>
        <constructor-arg name="age" value="18"/>
        <constructor-arg name="date" ref="now"/>


    </bean>
    <bean id = "now" class="java.util.Date"/>


</beans>

test類:

    public static void main(String[] args) {
         ApplicationContext cl = new ClassPathXmlApplicationContext("bean.xml");  //傳入xml文件
        Perpon person = (Perpon) cl.getBean("person");
        System.out.println(person);
    }
}

注意事項:

類中需要提供一個對應參數列表的構造函數。

然后我們就可以看到執行結果了。

Perpon{name='xiaoming', age=18, date=Sun Aug 30 05:32:35 CST 2020}

把person打印出來,這里看到這些成員變量都被賦值了,是由我們框架去完成的。

constructor-arg標簽屬性:

index:指定參數在構造函數參數列表的索引位置

type:指定參數在構造函數中的數據類型

name:指定參數在構造函數中的名稱 

value:它能賦的值是基本數據類型和 String 類型

ref:它能賦的值是其他 bean 類型,也就是說,必須得是在配置文件中配置過的 bean

Set 注入

 <bean id="person" class="com.test.doamin.Perpon">
        
    <property name="name" value="xiaoming"/>
    <property name="age" value="18"/>
    <property name="date" ref="now"/>
        

    </bean>
    <bean id = "now" class="java.util.Date"/>

property標簽屬性:

name:找的是類中 set 方法后面的部分
ref:給屬性賦值是其他 bean 類型的
value:給屬性賦值是基本數據類型和 string 類型的
實際開發中,此種方式用的較多。

0x05 結尾

在前面看到這個東西其實是懵的,后來看着看着發現其實還是挺簡單的,大部分都是一些概念上的東西比較難以理解,但是一般框架使用都比較簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM