zoukankan      html  css  js  c++  java
  • spring学习(1)-IOC容器

    IOC:控制反转。代码中不需要显示的new一个实例出来,只要指定好依赖的类名,剩余交给spring容器去管理初始化等
     
    通过IOC初始化bean的步骤:

    一、按照规范定义一个对Bean进行管理的xml配置元数据文件

    定义一个管理Bean的Beans.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"
           default-init-method="init"
           default-destroy-method="destory”
    >
    <!--<bean id="helloWorld" class="demo.demo" init-method="initmethod" destroy-method="destroymethod">-->
        <bean id="helloWorld" class="demo.demo">
            <property name="message" value="Hello World!"/>
        </bean>
    <bean id="hello meitian" parent="helloWorld">
        <property name="message" value="hello meitian"/>
    </bean>
    </beans>
    说明:一个bean节点表示一个类管理
    属性 描述
     id bean的名字,容器中通过getBean()获取对象的入参标识
    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 的所有必需的属性被容器设置之后,调用回调方法。
    destruction 方法 当包含该 bean 的容器被销毁时,使用回调方法。
    parent
    可以指定一个父bean,当前这个bean没有定义的属性赋值等操作,都会使用parent指定bean的内容
    当然如果当前bean已经覆盖的方法,会优先用自己的
     

    二、获得xml路径,通过Spring容器对xml中定义的bean进行实例化等管理操作

    Spring提供的两种容器:
    ApplicationContext是BeanFactory的子类,BeanFactory已基本不直接使用它了
    其他容器都是继承这些容器去实现一些个性化的功能
     
    ApplicationContext三种读取spring配置文件的方式:
    本地文件中,给出绝对地址(FileSystemXmlApplicationContext)
    classpath下,classpath的相对地址(ClassPathXmlApplicationContext)
    web应用程序的范围下(WebXmlApplicationContext))
     
    从容器中获得实例化后的bean实例
    bean:加载在IOC容器中的实例,由bean的配置元数据信息约束
    getBean():获得IOC容器中的spring的bean对象,入参为xml中配置的bean标签的id值
     
    实例:
    AbstractApplicationContext context = new FileSystemXmlApplicationContext("//opt/script/zzappcicd/src/main/resources/Beans.xml");
    demo obj = (demo) context.getBean("helloWorld”);
    说明:obj就是初始化后的类实例,可以直接.去调用它下面的方法和变量等
     

    三、Bean的生命周期

    Bean的生命周期可以表达为:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁 
     
    针对bean的初始化和销毁,提供了干预方式:实现接口类和基于XML元数据配置文件指定方法
     
    1、Bean.xml中配置Bean初始化和销毁时执行的方法

    1)Bean单独的初始化方法:init-method,销毁方法:destroy-method

    Bean销毁的时机:调用AbstractApplicationContext类的registerShutdownHook方法会触发Bean销毁逻辑
    AbstractApplicationContext context=new FileSystemXmlApplicationContext("//opt/script/zzappcicd/src/main/resources/Beans.xml");
    demo obj=(demo)context.getBean("helloWorld");
    obj.getMessage();
    context.registerShutdownHook();
     
    2)所有Bean通用的初始化方法:default-init-method,销毁方法:default-destroy-method
    注意点:如果Bean下有单独配置的初始化和注销方法,会走Bean单独的方法,否则才会走默认的
     
    2、实现接口类方式
    1)初始化
    publicclass ExampleBean implements InitializingBean{public void afterPropertiesSet(){// do some initialization work} }
     
    2)销毁
    publicclass ExampleBean implements DisposableBean{public void destroy(){// do some destruction work} }
     

    四、后置处理器

    后置处理器:针对类初始化前后做拦截处理
    实现方式:实现接口类,重写初始化前后的方法
    public class initbean implements BeanPostProcessor {
        @Override
        public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
            System.out.println("BeforeInitialization : " + s);
            return o;
        }
     
        @Override
        public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
            System.out.println("postProcessAfterInitialization : " + s);
            return o;
        }
    }
     
  • 相关阅读:
    Eureka 原理圖
    RabbitMQ 介紹
    rabbitmq-3.5.1-安裝
    MyBatis 基础入门
    CSS
    程序员必会算法-KMP算法
    编程这些年
    排序算法之直接插入排序
    排序算法之选择排序
    排序算法之冒泡排序
  • 原文地址:https://www.cnblogs.com/meitian/p/13339389.html
Copyright © 2011-2022 走看看