Spring IOC 配置文件加載--樂字節java

Spring 配置文件加載

spring.xmljava

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com.xxxx.service.UserService"></bean>
</beans>

根據相對路徑加載資源

ApplicationContext ac  = new ClassPathXmlApplicationContext("spring.xml");

根據絕對路徑加載資源(瞭解)

ApplicationContext ac = new FileSystemXmlApplicationContext("C:/IdeaWorkspace/spring01/src/main/resources/spring.xml");

Spring 多配置文件加載

​ Spring 框架啓動時能夠加載多個配置文件到環境中。對於比較複雜的項目,可能對應的配置文件有多個,項目在啓動部署時會將多個配置文件同時加載進來。spring

service.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userService" class="com.xxxx.service.UserService"></bean>
</beans>

dao.xmlide

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userDao" class="com.xxxx.dao.UserDao"></bean>
</beans>

可變參數,傳入多個文件名

// 同時加載多個資源文件
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml","dao.xml");

經過總的配置文件import其餘配置文件

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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--導入須要包含的資源文件-->
    <import resource="service.xml"/>
    <import resource="dao.xml"/>
</beans>

加載時只需加載總的配置文件便可spa

// 加載總的資源文件
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");

若有疑問,可加入羣:10803-55292,輸入暗號13,便可有大佬幫助code

Spring IOC 容器 Bean 對象實例化

構造器實例化

注:經過默認構造器建立 空構造方法必須存在 不然建立失敗xml

  1. 設置配置文件 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
           https://www.springframework.org/schema/beans/spring-beans.xsd">
    
       <bean id="userService" class="com.xxxx.service.UserService"></bean>
    
    </beans>
  2. 獲取實例化對象資源

    ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
    UserService userService = (UserService) ac.getBean("userService");  
    userService.test();

靜態工廠實例化(瞭解)

注:

  • 要有該工廠類及工廠方法
  • 工廠方法爲靜態的
  1. 定義靜態工廠類

    package com.xxxx.factory;
    
    import com.xxxx.service.UserService;
    
    /**
    * 定義靜態工廠類
    */
    public class StaticFactory {
       /**
        * 定義對應的靜態方法,返回實例化對象
        * @return
        */
       public static UserService createUserService() {
           return new UserService();
       }
    }
  2. 設置配置文件 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
           https://www.springframework.org/schema/beans/spring-beans.xsd">
    
       <!--靜態工廠-->
       <bean id="userService" class="com.xxxx.factory.StaticFactory" factory-method="createUserService"></bean>
    
    </beans>
  3. 獲取實例化對象

    ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
    UserService userService = (UserService) ac.getBean("userService");  
    userService.test();

    ​ 當咱們指定Spring使用靜態工廠方法來建立Bean實例時,Spring將先解析配置文件,並根據配置文件指定的信息,經過反射調用靜態工廠類的靜態工廠方法,並將該靜態工廠方法的返回值做爲Bean實例,在這個過程當中,Spring再也不負責建立Bean實例,Bean實例是由用戶提供的靜態工廠方法提供的。

實例化工廠實例化(瞭解)

注:

  • 工廠方法爲非靜態方法
  • 須要配置工廠bean,並在業務bean中配置factory-bean,factory-method屬性
  1. 定義工廠類

    package com.xxxx.factory;
    
    import com.xxxx.service.UserService;
    
    /**
    * 定義工廠類
    */
    public class InstanceFactory {
       /**
        * 定義方法,返回實例化對象
        * @return
        */
       public UserService createUserService() {
           return new UserService();
       }
    }
  2. 設置配置文件 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
           https://www.springframework.org/schema/beans/spring-beans.xsd">
    
       <!--
        實例化工廠
            1.定義實例化工廠bean
            2.引用工廠bean 指定工廠建立方法(方法爲非靜態)
    -->
       <bean id="instanceFactory" class="com.xxxx.factory.InstanceFactory"></bean>
       <bean id="userService" factory-bean="instanceFactory" factory-method="createUserService"></bean>
    
    </beans>
  3. 獲取實例化對象

    ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
    UserService userService = (UserService) ac.getBean("userService");  
    userService.test();

Spring三種實例化Bean的方式比較

  • 方式一:經過bean的缺省構造函數建立,當各個bean的業務邏輯相互比較獨立的時候或者和外界關聯較少的時候能夠使用。
  • 方式二:利用靜態factory方法建立,能夠統一管理各個bean的建立,如各個bean在建立以前須要相同的初始化處理,則可用這個factory方法險進行統一的處理等等。
  • 方式三:利用實例化factory方法建立,即將factory方法也做爲了業務bean來控制,1可用於集成其餘框架的bean建立管理方法,2可以使bean和factory的角色互換。

    開發中項目通常使用一種方式實例化bean,項目開發基本採用第一種方式,交給Spring託管,使用時直接拿來使用便可。另外兩種瞭解

image

相關文章
相關標籤/搜索