zoukankan      html  css  js  c++  java
  • Spring第二篇:Spring容器的基本使用及原理

    一、Spring的IOC容器

      Spring的IOC容器是具有依赖注入功能的容器,负责对象的实例化、对象的初始化,对象和对象之间依赖关系配置、对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来控制。我们需要使用的对象都由ioc容器进行管理,不需要我们再去手动通过new的方式去创建对象,由ioc容器直接帮我们组装好,当我们需要使用的时候直接从ioc容器中直接获取就可以了。

      IOC容器通过解析xml的配置文件和解读java的注解来获取需要管理的清单,安排配置文件和注解指定的对象创建方式构建对象,并将对象按照依赖关系组装好供外部调用。

    二、Bean概念

      Spring的IOC容器管理的对象就是Bean对象,Bean对象就是普通的Java,只不过现在对象的创建和管理需要Spring来完成。我们需要在配置文件中告诉Spring如何创建和管理该对象,我们把配置文件中这些定义bean对象的创建方式、对象间依赖关系和管理对象的配置信息称之为,配置元数据信息。Spring容器通过bean的配置元数据信息来创建和组装我们需要的bean对象。

     三、Spring容器的基本使用

      1、创建maven项目

      2、引入spring的maven相关依赖

      3、增加bean的xml配置元数据信息,定义spring容器管理的bean对象

      4、创建Spring容器,并指定加载的bean配置文件。启动Spring容器,加载指定的bean配置文件,创建配置文件中定义好的bean对象,bean对象存放在容器中供外部使用。

      5、获取spring容器中的对象,并使用。

    四、Spring的容器对象

      1、BeanFactory接口

      org.springframework.beans.factory.BeanFactory接口是Spring容器的顶层接口,提供了容器最基本的使用方法。

      常用的方法:

    //按bean的id或者别名查找容器中的bean
    Object getBean(String name) throws BeansException
    
    //这个是一个泛型方法,按照bean的id或者别名查找指定类型的bean,返回指定类型的bean对象
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;
    
    //返回容器中指定类型的bean对象
    <T> T getBean(Class<T> requiredType) throws BeansException;
    
    //获取指定类型bean对象的获取器,这个方法比较特别,以后会专门来讲
    <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);

      2、ApplicationContext接口

      org.springframework.context.ApplicationContext接口继承了BeanFactory接口的所有功能,并在其基础上增加了AOP、事件支持、国际化等功能。

      3、ClassPathXmlApplicationContext接口

      org.springframework.context.support.ClassPathXmlApplicationContext接口继承了ApplicationContext接口,这个接口可以从classPath接口中加载xml文件,并根据xml文件的配置元数据信息创建bean对象。

      4、AnnotationConfigApplicationContext接口

      org.springframework.context.annotation.AnnotationConfigApplicationContext接口也继承了ApplicationContext接口,上面的ClassPathXmlApplicationContext接口支持从xml的配置文件中创建并管理bean对象,而AnnotationConfigApplicationContext接口则支持从注解解析中创建和管理bean对象。

      使用注解的方式比使用xml文件配置的方式要更加方便。

    五、Spring的IOC容器简单使用

      1、创建maven

      创建spring-series的聚合工程,并添加相应的依赖管理

    <groupId>lin.java.spring</groupId>
        <artifactId>spring-series</artifactId>
        <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

      pom.xml文件信息

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!-- 配置maven编译的时候采用的编译器版本 -->
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            <!-- 指定源代码是什么版本的,如果源码和这个版本不符将报错,maven中执行编译的时候会用到这个配置,默认是1.5,这个相当于javac命令后面的-source参数 -->
            <maven.compiler.source>1.8</maven.compiler.source>
            <!-- 该命令用于指定生成的class文件将保证和哪个版本的虚拟机进行兼容,maven中执行编译的时候会用到这个配置,默认是1.5,这个相当于javac命令后面的-target参数 -->
            <maven.compiler.target>1.8</maven.compiler.target>
            <!--spring版本控制-->
            <spring.version>5.2.3.RELEASE</spring.version>
            <!--junit版本控制-->
            <junit.version>4.13-beta-3</junit.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>${spring.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                    <version>${spring.version}</version>
                </dependency>
    
                <!--junit-->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>

      选中spring-series,进行module创建,相应的pom.xml中增加依赖配置

    <!--加入spring依赖-->
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>

      2、在项目中创建相应的类

      在项目重创建测试用的实体类

    package com.java.spring01.demo1;
    
    public class HelloSpring {
    
        public void say(String str){
            System.out.println("hello spring IOC First demo " + str);
        }
    }

      3、在resources文件中创建bean.xml文件,用于指定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-4.3.xsd">
    
        <!--
        定义一个bean
        id:bean的唯一标识,可以通过这个标识从容器中获取这个bean对象
        clss:bean的类型,完整类名称
        -->
        <bean id="helloSpring" class="com.java.spring01.demo1.HelloSpring"/>
    
    </beans>

      3、创建test方法并运行

    package com.java.spring01.demo1;
    
    import org.junit.Test;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class HelloSpringTest {
    
        @Test
        public void testSay(){
            //1、配置xml文件路径
            String beanXml = "classpath:/spring01/demo1/bean.xml";
            //2、获取IOC容器,加载配置文件到容器中
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(beanXml);
            //3、获取bean对象
            HelloSpring bean = context.getBean("helloSpring", HelloSpring.class);
            //4、运行bean方法
            bean.say("测试");
        }
    }

      运行结果:

  • 相关阅读:
    Designing IP-Based Video Conferencing Systems: Dealing with Lip Synchronization(唇音同步)
    ffmpeg 如何音视频同步
    音视频同步(播放)原理
    您的 PHP 似乎没有安装运行 WordPress 所必需的 MySQL 扩展”处理方法
    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statemen
    获得H.264视频分辨率的方法
    1080P、720P、4CIF、CIF所需要的理论带宽
    linux mysql 操作命令
    RTP/RTCP的时间同步机制
  • 原文地址:https://www.cnblogs.com/8593l/p/12801204.html
Copyright © 2011-2022 走看看