Spring從入門到入土——快速上手Spring


相關文章推薦:

跟着官網學spring—快速入門指南

跟着官網學Spring—構建RESTful Web服務

Spring從入門到入土——概述以及IOC理論推導

Spring從入門到入土——快速上手Spring

HelloSpring

​ 我們要想使用Spring,首先肯定要先導入其jar包,我們只需要在maven配置文件中加入響應的依賴,就會自動下載相應的依賴項,

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

編寫代碼

編寫一個Hello實體類
public class Hello {
    public String str;
   
    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        System.out.println("set");
        this.str = str;
    }

    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + '\'' +
                '}';
    }
}
編寫Spring文件,命名爲beans.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">

    <!--使用spring來創建對象-->
    <bean id="hello" class="com.zhonghu.pojo.Hello">
        <property name="str" value="Spring"/>
    </bean>
</beans>
測試
@Test
public void test(){
   //解析beans.xml文件 , 生成管理相應的Bean對象
   ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
   //getBean : 參數即爲spring配置文件中bean的id .
   Hello hello = (Hello) context.getBean("hello");
   System.out.println(hello.toString());
}
結果以及總結
  • 結果

  • 總結
    • 在結果中我們可以很清晰的看到,其調用了set方法,也就是說set方法是實現Ioc的基礎。
    • Hello對象是誰創建的?——是Spring創建的
    • Hello對象的屬性是怎麼設置的?——hello對象的屬性是由Spring容器實現的。
  • 這個過程就是控制反轉:
    • 控制:誰來控制對象的創建,傳統應用程序是程序員來控制創建的,使用spring後,對象是由spring來創建的
    • 反轉:程序本身不創建對象,而是變爲被動接受對象
  • 依賴注入:就是利用set方法來進行注入的

IOC創建對象方式

通過無參構造方法來創建

User.java
public class User {

   private String name;

   public User() {
       System.out.println("user無參構造方法");
  }

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

   public void show(){
       System.out.println("name="+ name );
  }

}
beans.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="user" class="com.zhonghu.pojo.User">
        <property name="name" value="kuangshen"/>
    </bean>

</beans>
測試
@Test
public void test(){
   ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
   //在執行getBean的時候, user已經創建好了 , 通過無參構造
   User user = (User) context.getBean("user");
   //調用對象的方法 .
   user.show();
}
結果

​ 可以發現,在調用show方法前,User對象就已經通過無參構造初始化了

通過有參構造方法來創建

UserT.java
public class UserT {

   private String name;

   public UserT(String name) {
       this.name = name;
  }

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

   public void show(){
       System.out.println("name="+ name );
  }

}
beans.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="userT" class="com.zhonghu.pojo.UserT">
<!--        name 指參數名-->
        <constructor-arg name="name"value="zhonghu"/>
        
    </bean>
    
    
<!--    第二種根骨index參數下標來設置-->
    <bean id="userT" class="com.zhonghu.pojo.UserT">
<!--     index值構造方法,下標從0開始   -->
        <constructor-arg index="0" value="zhonghu"/>
    </bean>

    
    
<!--   第三種 根據參數類型設置 十分不推薦-->
    <bean id="useT"class="com.zhonghu.pojo.UserT">
        <constructor-arg type="java.lang.String" value="zhonghu"/>
    </bean>
</beans>
測試
@Test
public void testT(){
   ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
   UserT user = (UserT) context.getBean("userT");
   user.show();
}
總結

​ 在配置文件加載的時候。其中管理的對象都已經初始化了

Spring的配置

別名

alias 爲bean設置別名,可以同時設置多個別名

<!--設置別名:在獲取Bean的時候可以使用別名獲取-->
<alias name="userT" alias="userNew"/>

Bean的配置

<!--bean就是java對象,由Spring創建和管理-->

<!--
   id 是bean的標識符,要唯一,如果沒有配置id,name就是默認標識符
   如果配置id,又配置了name,那麼name是別名
   name可以設置多個別名,可以用逗號,分號,空格隔開
   如果不配置id和name,可以根據applicationContext.getBean(.class)獲取對象;

class是bean的全限定名=包名+類名
-->
<bean id="hello" name="hello2 h2,h3;h4" class="com.kuang.pojo.Hello">
   <property name="name" value="Spring"/>
</bean>

import

一般用於團隊開發,可以將多個配置文件導入合併爲一個。

<import resource="{path}/beans.xml"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章