zoukankan      html  css  js  c++  java
  • Spring--IOC

    Spring IOC 

    Spring IOC 有两个主要容器:

    ApplicationContext (接口)

    常用的三个实现类:

    • FileSystemXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径,相对路径也可以。

        ApplicationContext context = new FileSystemXmlApplicationContext("D:/qwq/eclipse--workspaces7-test-4月2日/SpringExample/src/Beans.xml");

    • ClassPathXmlApplicationContext:该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。

       ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

    • WebXmlApplicationContext:该容器会在一个 web 应用程序的范围内加载在 XML 文件中已被定义的 bean。

    BeanFactory (接口)

    接口中最常用的是XmlBeanFactory 这个实现类

    XmlBeanFactory factory = new XmlBeanFactory (new ClassPathResource("Beans.xml"));

    总结

    ApplicationContext 包含了 BeanFactory 所有的功能,但是做小程序或者移动端可以用  BeanFactory 因为它的数据量和速度是显著。


    Bean 定义

    属性描述
    class 这个属性是强制性的,并且指定用来创建 bean 的 bean 类。
    name 这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。
    scope 这个属性指定由特定的 bean 定义创建的对象的作用域,它将会在 bean 作用域的章节中进行讨论。
    constructor-arg 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
    properties 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
    autowiring mode 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
    lazy-initialization mode 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。
    initialization 方法 在 bean 的所有必需的属性被容器设置之后,调用回调方法。它将会在 bean 的生命周期章节中进行讨论。
    destruction 方法 当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。
    <?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-3.0.xsd">
    
       <!-- 一个简单的bean定义 -->
       <bean id="..." class="...">
           <!-- 这个bean的配置 -->
       </bean>
    
       <!-- A bean definition with lazy init set on -->
       <bean id="..." class="..." lazy-init="true">
           <!-- 这个bean的配置 -->
       </bean>
    
       <!-- 带有初始化方法的bean -->
       <bean id="..." class="..." init-method="...">
           <!-- 这个bean的配置 -->
       </bean>
    
       <!-- 带有销毁方法的bean -->
       <bean id="..." class="..." destroy-method="...">
           <!-- 这个bean的配置 -->
       </bean>
    
       <!-- 。。。 -->
    
    </beans>

     bean 的作用域

    scope:属性

    作用域描述
    singleton 单例模式
    prototype 非单例模式
    request 该作用域将 bean 的定义限制为 HTTP 请求。只在 web-aware Spring ApplicationContext 的上下文中有效。
    session 该作用域将 bean 的定义限制为 HTTP 会话。 只在web-aware Spring ApplicationContext的上下文中有效。
    global-session 该作用域将 bean 的定义限制为全局 HTTP 会话。只在 web-aware Spring ApplicationContext 的上下文中有效。


    <!--
    单利模式的bean --> <bean id="..." class="..." scope="singleton"> <!-- 配置 --> </bean>

    Bean 的生命周期

    init-method 属性指定一个方法,在实例化 bean 时,立即调用该方法。同样,destroy-method 指定一个方法,只有从容器中移除 bean 之后,才能调用该方法。

    <bean id="..."  class="..." init-method="init" destroy-method="destroy">
    
       </bean>

    intidestroy 都是方法。

    context.registerShutdownHook();      它将确保正常关闭,并且调用相关的 destroy 方法。

    默认的初始化和销毁方法

    如果你有太多具有相同名称的初始化或者销毁方法的 Bean,那么你不需要在每一个 bean 上声明初始化方法销毁方法。框架使用 元素中的 default-init-method 和 default-destroy-method 属性提供了灵活地配置这种情况,如下所示:

    <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-3.0.xsd"
        default-init-method="init" 
        default-destroy-method="destroy">
    
       <bean id="..." class="...">
           <!-- collaborators and configuration for this bean go here -->
       </bean>
    
    </beans>

     


    Bean 后置处理器

    实现了 BeanPostProcessor  接口的类。

    类实现  postProcessBeforeInitialization  和  postProcessAfterInitialization   这两个方法

    package com.qie_zi;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    
    public class InitHelloWorld implements BeanPostProcessor {
    
        public Object postProcessBeforeInitialization(Object bean, String beanName)
                throws BeansException {
            System.out.println("第一个B : " + beanName);
            return bean;
        }
    
        public Object postProcessAfterInitialization(Object bean, String beanName)
                throws BeansException {
            System.out.println("第一个A : " + beanName);
            return bean;
        }
    }

    然后把这个类在Beans.xml中注册一下,运行时,就会自动调用到这两个方法


    Bean 定义继承

    parent :要继承的父类。

    此继承和Java类中继承的效果相同

    <?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-3.0.xsd">
    
       <bean id="helloWorld" class="com.tutorialspoint.HelloWorld">
          <property name="message1" value="Hello World!"/>
          <property name="message2" value="Hello Second World!"/>
       </bean>
    
       <bean id="helloIndia" class="com.tutorialspoint.HelloIndia" parent="helloWorld">
          <property name="message1" value="Hello India!"/>
          <property name="message3" value="Namaste India!"/>
       </bean>
    
    </beans>
  • 相关阅读:
    34、JS/AJAX
    33、mybatis(二)
    32、mybatis
    31、springmvc(注解)
    30、springmvc
    29、Oralce(五)
    Spring学习之路-SpringBoot简单入门
    Spring学习之路-从放弃到入门
    心情日记
    Spring学习之路-从入门到放弃
  • 原文地址:https://www.cnblogs.com/qie-zi/p/8758852.html
Copyright © 2011-2022 走看看