SSM學習—Spring(第二天學習記錄)

IOC和DI

IOC和DI的關係:IOC是思想,DI是實現
反轉控制:在應用程序中的組件需要獲取資源時,傳統的方式是組件主動的從容器中獲取所需要的資源,反轉了資源的獲取方向——改由容器主動的將資源推送給需要的組件,開發人員不需要知道容器是如何創建資源對象的,只需要提供接收資源的方式即可

XML文件配置以及意義

<!-- 配置bean 
	  配置方式:  基於xml的方式 ,使用的全類名的方式.
	 <bean>: 受Spring管理的一個javaBean對象. 
	 	id:  <bean>的唯一標識. 在整個IOC容器中唯一不重複. 
	 	class: 指定javaBean的全類名. 目的是通過反射創建對象。 
	 		   Class cls = Class.forName("com.atguigu.spring.helloWorld.Person");
	 		   Object obj = cls.newInstance();   必須提供無參數構造器. 
	 <property>: 給對象的屬性賦值
	  	name: 指定屬性名  , 指定set風格的屬性名. 
	  	value:指定屬性值 	
-->	

理解屬性和成員變量
private String name;這是成員變量
private void setName(String name);這是屬性

IOC容器的實現

Spring中有倆個實現方式

1. BeanFactory
IOC容器的基本實現,是Spring內部的基礎設施,是面向Spring本身的,不是提供給開發人員使用的。
2. ApplicationContext
BeanFactory的子接口,提供了更多高級特性。面向Spring的使用者,幾乎所有場合都使用ApplicationContext而不是底層的BeanFactory。
ConfigurableApplicationContext是ApplicationContext的子接口 refresh()和close()讓ApplicationContext具有啓動、關閉和刷新上下文的能力。
主要實現類:

  1. ClassPathXmlApplicationContext:對應類路徑下的XML格式的配置文件
  2. FileSystemXmlApplicationContext:對應文件系統中的XML格式的配置文件
  3. 在初始化時就創建單例的bean,也可以通過配置的方式指定創建的Bean是多實例的

獲取Bean對象

三種方法

 		//獲取一個Person對象
        Person person=(Person)applicationContext.getBean("person");
        //這種如果有多個同類型的會出錯
        Person person1=applicationContext.getBean(Person.class);
        Person person2=applicationContext.getBean("person",Person.class);

賦值:

	<!--set注入-->
    <bean id="DITest" class="DI.Car">
        <property name="brand" value="寶馬"/>
        <property name="price" value="20000000000000"/>
        <property name="rop"  value="Nobody"/>
    </bean>
    <!--構造器
    		 index:指定參數的位置
		 type: 指定參數的類型 
    --> 
    <bean id="car1" class="DI.Car">
		<constructor-arg value="寶馬" index="0"></constructor-arg>
		<constructor-arg value="450000" index="2" type="java.lang.Double"></constructor-arg>
		<constructor-arg value="華晨" index="1"></constructor-arg>
	</bean>
	<!--p命名空間,非依賴注入,也是get和set方法-->
	把這句加載<beans>裏面
	 xmlns:p="http://www.springframework.org/schema/p"
	    <bean
        id="Car"
        class="DI.Car"
        p:brand="福特"
        p:rop="長安"
        p:price="300000000"
    />
    <!--引用其他的Bean-->
    <bean id="testB" class="DI.Person">
        <property name="id">
            <value>101</value>
        </property>
        <property name="name" value="張三"/>
        <property name="car" ref="Car"/>
    </bean>
       <!--內部bean-->
    <bean id="testin" class="DI.Person">
    <property name="id" value="103"></property>
    <property name="car">
        <bean class="DI.Car">
            <property name="rop" value="寶馬"></property>
            <property name="price" value="2018291237"></property>
            <property name="brand" value="長城"/>
        </bean>
    </property>
        <property name="name" value="李四"></property>
    </bean>
    <!--測試級聯-->
       <bean id="action" class="com.atguigu.spring.ref.Action">
          <property name="service" ref="service"/>
          <!-- 設置級聯屬性(瞭解) -->
          <property name="service.dao.dataSource" value="DBCP"/>
     </bean>

可以使用的值

  • 字面量
    可以使用字符串表示的值,例如 value=“寶馬”
    也可以使用寶馬
    遇到特殊字符的時候
    可以使用<![CDATA[]]>把字面值包裹起來
    在這裏插入圖片描述
    賦空值(個人認爲最蠢的設定,沒有之一)
   <property name= "bookName">
               <null/>
           </property>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章