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

相关文章
相关标签/搜索