zoukankan      html  css  js  c++  java
  • SpringFramework|基于XML的依赖注入

    SpringFramework|基于XML的依赖注入

    环境交代

    Java: 1.8

    Maven: 3

    SpringFramework版本以及各组件成员: 5.1.1.RELEASE

    • spring-context
    • spring-core
    • spring-beans

    依赖注入

    分别有两种注入形式:

    • 构造注入
    • 设值注入

    基于XML的构造注入

    背景

    例子中的BeanUser是个"哑巴", 不具备表达能力. 它希望能借用BeansayHelloWorld来说两句话, 以表达自己第一次加入程序大家庭的喜悦之情.

    代码

    具有sayHelloWorld的bean - Bean.java


    这个"Bean"并不符合JavaBean规范, 只是根据Spring中的配置顺口叫的...
    具体的JavaBean可以另行搜索.

    package noioo;
    
    public class Bean {
        public void sayHelloWorld(){
            System.out.println("Hello World");
        }
    }
    

    这是想说话的 - BeanUser.java

    package noioo;
    
    public class BeanUser {
    
        private Bean bean;
    
        // need to SayHelloWorld
        public BeanUser(Bean bean){
            this.bean = bean;
        }
    
        // user
        public void useBean(){
            bean.sayHelloWorld();
        }
    }
    
    

    srping容器, 配置依赖注入的元数据 - spring-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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--被使用(被依赖)的Bean-->
        <bean id="bean" class="noioo.Bean"/>
    
        <!--bean的使用者-->
        <bean id="beanUser" class="noioo.BeanUser">
            <!--表明需要构造注入, 并指定ref=所依赖bean的名字-->
            <constructor-arg ref="bean"/>
        </bean>
    </beans>
    

    这是第三方调用方(执行者), BeanUser总得有个人来调用它的方法.

    package noioo;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MainRunner {
    
        public static void main(String[] args){
    
            // 加载容器
            ApplicationContext context = new
                    ClassPathXmlApplicationContext("spring-beans.xml");
    
            // 利用容器对象(上下文)来获取beanUser对象, 此时会依据beanUser在容器中的配置元数据进行注入.
            BeanUser beanUser = (BeanUser)context.getBean("beanUser");
    
            // 调用方法: 表明了beanUser可以使用bean中的方法, 是已经获得了bean对象的了.
            beanUser.useBean();
        }
    }
    

    运行结果

    运行MainRunner, 会出现以下结果:

    Hello World
    
    Process finished with exit code 0
    

    基于XML的设值注入

    背景

    仍是上面的例子.

    代码

    具有sayHelloWorld的bean - Bean.java

    package noioo;
    
    public class Bean {
        public void sayHelloWorld(){
            System.out.println("Hello World");
        }
    }
    

    这是想说话的 - BeanUser.java

    package noioo;
    
    public class BeanUser {
        
        private Bean bean;
        public Bean getBean() {
            return bean;
        }
        public void setBean(Bean bean) {
            this.bean = bean;
        }
        public void useBean(){
            bean.sayHelloWorld();
        }
    }
    

    配置文件 - spring-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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--被使用(被依赖)的Bean-->
        <bean id="bean" class="noioo.Bean"/>
    
        <!--bean的使用者-->
        <bean id="beanUser" class="noioo.BeanUser">
            <!--表明需要构造注入, 并指定ref=所依赖bean的名字-->
            <property name="bean" ref="bean"/>
        </bean>
    </beans>
    

    执行者

    package noioo;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class MainRunner {
    
        public static void main(String[] args){
    
            // 加载容器
            ApplicationContext context = new
                    ClassPathXmlApplicationContext("spring-beans.xml");
    
            // 利用容器对象(上下文)来获取beanUser对象, 此时会依据beanUser在容器中的配置元数据进行注入.
            BeanUser beanUser = (BeanUser)context.getBean("beanUser");
    
            // 调用方法: 表明了beanUser可以使用bean中的方法, 是已经获得了bean对象的了.
            beanUser.useBean();
        }
    }
    
    

    运行结果

    Hello World
    
    Process finished with exit code 0
    
  • 相关阅读:
    云原生学习笔记(4)——Pod和容器设计模式
    云原生学习笔记(3)——Kubernetes基本概念
    云原生学习笔记(2)——容器基本概念
    云原生学习笔记(1)——云原生
    JAVA基础系列:JDK目录结构
    Mac 接手步骤
    JAVA基础系列:运行环境
    软件测试系列——Web界面检查点和测试原则
    软件测试系列——白盒测试
    软件测试系列——性能指标
  • 原文地址:https://www.cnblogs.com/shwo/p/9849500.html
Copyright © 2011-2022 走看看