zoukankan      html  css  js  c++  java
  • Spring源码解析(一)实现IOC的几种方式

    项目结构

    ├── iocinit.iml
    ├── pom.xml
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── terwergreen
    │   │   │           └── spring
    │   │   │               └── iocinit
    │   │   │                   ├── IOCTest1.java
    │   │   │                   ├── IOCTest2.java
    │   │   │                   ├── IOCTest3.java
    │   │   │                   └── beans
    │   │   │                       ├── America.java
    │   │   │                       ├── Chinese.java
    │   │   │                       └── Person.java
    │   │   └── resources
    │   │       └── applicationContext.xml
    │   └── test
    │       └── java
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.terwergreen.spring</groupId>
        <artifactId>iocinit</artifactId>
        <version>1.0.0</version>
    
        <dependencies>
            <!-- spring-beans -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>5.1.6.RELEASE</version>
            </dependency>
            <!-- spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.1.6.RELEASE</version>
            </dependency>
        </dependencies>
    </project>
    

    beans

    先建立几个bean

    America.java

    package com.terwergreen.spring.iocinit.beans;
    
    public class America implements Person {
        public String sayHello(String name) {
            return "hello," + name;
        }
    }
    

    Chinese.java

    package com.terwergreen.spring.iocinit.beans;
    
    /**
     * Chinese
     *
     * @author Terwer
     * @version 1.0
     * 2019/5/6 17:39
     **/
    public class Chinese implements Person {
        public String sayHello(String name) {
            return "你好," + name;
        }
    }
    

    Person.java

    package com.terwergreen.spring.iocinit.beans;
    
    /**
     * Person
     *
     * @author Terwer
     * @version 1.0
     * 2019/5/6 17:39
     **/
    public interface Person {
        String sayHello(String name);
    }
    

    使用 XmlBeanFactory 实现IOC

    package com.terwergreen.spring.iocinit;
    
    import com.terwergreen.spring.iocinit.beans.Person;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;
    
    /**
     * IOCTest1
     *
     * @author terwer
     * @version 1.0
     * 2019-05-17 21:38
     **/
    public class IOCTest1 {
    
        public static void main(String[] args) {
            ClassPathResource resource = new ClassPathResource("applicationContext.xml");
            XmlBeanFactory beanFactory = new XmlBeanFactory(resource);
            Person p1 = (Person) beanFactory.getBean("chinese");
            String result = p1.sayHello("Terwer");
            System.out.println(result);
    
            Person p2 = (Person) beanFactory.getBean("america");
            String result2 = p2.sayHello("Green");
            System.out.println(result2);
    
        }
    }
    

    输出

    你好,Terwer
    hello,Green
    

    使用 DefaultListableBeanFactory 实现IOC

    package com.terwergreen.spring.iocinit;
    
    import com.terwergreen.spring.iocinit.beans.Person;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
    import org.springframework.core.io.ClassPathResource;
    
    /**
     * IOCTest2
     *
     * @author terwer
     * @version 1.0
     * 2019-05-17 21:45
     **/
    public class IOCTest2 {
    
        public static void main(String[] args) {
            // 定位
            ClassPathResource resource = new ClassPathResource("applicationContext.xml");
            // 载入
            DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
            XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
            // 注册
            reader.loadBeanDefinitions(resource);
    
            // 从beanFactory获取bean
            Person p1 = (Person) beanFactory.getBean("chinese");
            String result = p1.sayHello("Green");
            System.out.println(result);
        }
    }
    

    输出

    你好,Green
    

    使用 ClassPathXmlApplicationContext 实现IOC

    package com.terwergreen.spring.iocinit;
    
    import com.terwergreen.spring.iocinit.beans.Person;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * IOCTest3
     *
     * @author terwer
     * @version 1.0
     * 2019-05-17 21:47
     **/
    public class IOCTest3 {
        public static void main(String[] args) {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
            Person p1 = (Person) applicationContext.getBean("america");
            String result = p1.sayHello("Test3 from applicationContext");
            System.out.println(result);
        }
    }
    

    输出

    hello,Test3 from applicationContext
    
  • 相关阅读:
    彻底解决python cgi 编程出现的编码问题
    设置 mysql事物隔离级别
    python multiprocessing.Pool 中map、map_async、apply、apply_async的区别
    python 多线程、多进程、协程性能对比(以爬虫为例)
    一个学习git版本管理的超棒网站
    python3将unicode转化成中文输出
    python jieba包用法总结
    Oracle Dataguard
    Kubernetes -- DaemonSet
    STRIDE威胁建模
  • 原文地址:https://www.cnblogs.com/tangyouwei/p/10883928.html
Copyright © 2011-2022 走看看