3、spring應用 進一步理解IOC

一、創(chuàng)建第一個spring項目

1.1、導入Jar包

注 : spring 需要導入commons-logging進行日志記錄 . 我們利用maven , 他會自動下載對應的依賴項 .

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>5.1.10.RELEASE</version>
</dependency>

1.2、編寫代碼

  • 1、編寫一個Hello實體類
public class Hello {
   private String name;

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

   public void show(){
       System.out.println("Hello,"+ name );
  }
}
  • 2、編寫我們的spring文件 , 這里我們命名為beans.xml,官方默認ApplicationContext.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就是java對象 , 由Spring創(chuàng)建和管理
id:對象名  class:類的地址,指定需要創(chuàng)建和管理的對象
property:屬性
-->
   <bean id="hello" class="com.kuang.pojo.Hello">
       <property name="name" value="Spring"/>
   </bean>

</beans>
  • 3、測試,從spring容器中獲取對象
@Test
public void test(){
   //解析beans.xml文件 , 生成管理相應的Bean對象
// 通過xml的方式獲取spring上下文,xml可傳入多個
   ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
   //getBean : 參數(shù)即為spring配置文件中bean的id .
   Hello hello = (Hello) context.getBean("hello");
   hello.show();
}

結論

  • 1、Hello 對象是誰創(chuàng)建的 ?
    hello 對象是由Spring創(chuàng)建的

  • 2、Hello 對象的屬性是怎么設置的 ?
    hello 對象的屬性是由Spring容器設置的

  • 這個過程就叫控制反轉 :
    控制 : 誰來控制對象的創(chuàng)建 , 傳統(tǒng)應用程序的對象是由程序本身控制創(chuàng)建的 , 使用Spring后 , 對象是由Spring來創(chuàng)建的
    反轉 : 程序本身不創(chuàng)建對象 , 而變成被動的接收對象 .
    依賴注入 : 就是利用set方法來進行注入的,當hello實體類刪除set方法時將無法進行屬性設置
    IOC是一種編程思想,由主動的編程變成被動的接收

二、多個bean的托管,有組合關系的bean用spring進行托管,進一步理解ioc思想

我們在案例一的beans.xml增加對bean的配置,在對UserServiceImpl這個類進托管的時候設置不同的userDao屬性指向來實現(xiàn)調(diào)用不同的實現(xiàn),這樣就和之前通過set方式實現(xiàn)ioc達到了相同的效果

<?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="MysqlImpl" class="com.kuang.dao.impl.UserDaoMySqlImpl"/>
   <bean id="OracleImpl" class="com.kuang.dao.impl.UserDaoOracleImpl"/>

   <bean id="ServiceImpl" class="com.kuang.service.impl.UserServiceImpl">
       <!--注意: 這里的name并不是屬性 , 而是set方法后面的那部分 , 首字母小寫-->
       <!--引用另外一個bean ,  而是用 ref,通過不同的ref來指定指向不同的實現(xiàn)-->
       <property name="userDao" ref="OracleImpl"/>
   </bean>

</beans>
  • 測試
@Test
public void test2(){
   ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
   UserServiceImpl serviceImpl = (UserServiceImpl) context.getBean("ServiceImpl");
   serviceImpl.getUser();
}

至此,要實現(xiàn)不同的操作 , 只需要在xml配置文件中進行修改 ,
***所謂的IoC: : 對象由Spring 來創(chuàng)建 , 管理 , 裝配 ! ***

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容