• Spring IoC 容器 Bean 的装配


    注:以下文件均使用同一个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>org.example</groupId>
        <artifactId>homework0909</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.8.RELEASE</version>
            </dependency>
        </dependencies>
    
    </project>
    

    一、spring 项目的创建练习

    1.1 先创建一个HardDisk 接口:

    package spring.computer.dao;
    
    public interface HardDisk {
        void diskInfo();
    }
    
    

    1.2 实现这个接口

    实现一:三星硬盘:

    package spring.computer.dao;
    
    public class SamsungHardDisk implements HardDisk {
    
        private int memorySize;
    
        // 实现diskInfo方法,输出硬盘信息
        @Override
        public void diskInfo() {
            System.out.println("这是三星硬盘,内存大小是:" + memorySize);
        }
    
        public void setMemorySize(int memorySize) {
            this.memorySize = memorySize;
        }
    }
    

    实现二:希捷硬盘:

    package spring.computer.dao;
    
    public class SeagateHardDisk implements HardDisk {
    
        private int memorySize;
    
        // 实现diskInfo方法,输出硬盘信息
        @Override
        public void diskInfo() {
            System.out.println("这是希捷硬盘,内存大小是:" + memorySize);
        }
    
        public void setMemorySize(int memorySize) {
            this.memorySize = memorySize;
        }
    }
    

    1.3 编写xml配置文件

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    
        <bean id="seagate256g" class="spring.computer.dao.SeagateHardDisk">
            <property name="memorySize" value="256"/>
        </bean>
        <bean id="samsung1tb" class="spring.computer.dao.SamsungHardDisk">
            <property name="memorySize" value="1000"/>
        </bean>
    </beans>
    

    1.4 测试类

    package spring.computer.dao;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class HardDiskImplTest {
        public static void main(String[] args) {
            // 实例化spring容器
            ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
    
            // 获取希捷硬盘bean
            SeagateHardDisk seagate256g = (SeagateHardDisk)ctx.getBean("seagate256g");
            seagate256g.diskInfo();
    
            // 获取三星硬盘bean
            SamsungHardDisk samsung1tb = (SamsungHardDisk)ctx.getBean("samsung1tb");
            samsung1tb.diskInfo();
        }
    
    }
    

    1.5 运行结果

    二、打印机输出配置信息练习

    2.1、编写InkDao/PaperDao接口

    InkDao.java

    package com.printer.ink;
    
    public interface InkDao {
        // 定义printInkInfo方法,输出Ink信息
        void printInkInfo();
    }
    
    

    PaperDao.java

    package com.printer.paper;
    
    public interface PaperDao {
        // 定义printPaperInfo方法,输出纸张信息
        void printPaperInfo();
    }
    
    

    2.2 编写InkDaoImpl/PaperDaoImpl

    InkDaoImpl.java

    package com.printer.ink;
    
    public class InkDaoImpl implements InkDao {
    
        private String inkInfo;
    
        // 提供构造器供框架调用
        InkDaoImpl(){}
        InkDaoImpl(String inkInfo) {
            this.inkInfo = inkInfo;
        }
    
        @Override
        public void printInkInfo() {
            System.out.println("墨盒信息:" + inkInfo);
        }
    
        /*
        public void setInkInfo(String inkInfo) {
            this.inkInfo = inkInfo;
        }
         */
    }
    
    

    PaperDaoImpl.java

    package com.printer.paper;
    
    public class PaperDaoImpl implements PaperDao {
    
        private String paperInfo;
    
        // 提供构造器供框架调用
        PaperDaoImpl(){}
        PaperDaoImpl(String paperInfo) {
            this.paperInfo = paperInfo;
        }
    
        @Override
        public void printPaperInfo() {
            System.out.println("纸张信息:" + paperInfo);
        }
    
        /*
        public void setPaperInfo(String paperInfo) {
            this.paperInfo = paperInfo;
        }
         */
    }
    
    

    2.3 编写Printer类

    Printer.java

    package com.printer.printer;
    
    import com.printer.ink.InkDao;
    import com.printer.paper.PaperDao;
    
    public class Printer {
    
        private InkDao inkDao;
        private PaperDao paperDao;
    
        public void printerInfo() {
            System.out.println("打印机配置");
            inkDao.printInkInfo();
            paperDao.printPaperInfo();
        }
    
        public void setInkDao(InkDao inkDao) {
            this.inkDao = inkDao;
        }
    
        public void setPaperDao(PaperDao paperDao) {
            this.paperDao = paperDao;
        }
    }
    

    2.4 编写xml配置文件

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.2.xsd">
        <bean id="inkInfo" name="inkDao" class="com.printer.ink.InkDaoImpl">
            <constructor-arg name="inkInfo" value="墨水还有20桶" index="0"/>
            <!--
            <property name="inkInfo" value="墨水还有20桶。"/>
            -->
        </bean>
        <bean id="paperInfo" name="paperDao" class="com.printer.paper.PaperDaoImpl">
            <constructor-arg name="paperInfo" value="纸张还有800捆。" index="0"/>
            <!--
            <property name="paperInfo" value="纸张还有800捆。"/>
            -->
        </bean>
        <bean id="mainPrinter" class="com.printer.printer.Printer">
            <property name="inkDao" ref="inkInfo"/>
            <property name="paperDao" ref="paperInfo"/>
        </bean>
    
    </beans>
    

    2.5 编写PrinterTest测试类

    package com.printer.printer;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class PrinterTest {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
            Printer mainprinter = (Printer)ctx.getBean("mainPrinter");
            mainprinter.printerInfo();
        }
    }
    

    2.6 运行结果

    备注:
    1、设值注入和自动注入均需要setter方法。
    2、构造器注入不能有setter方法(不确定)。
    3、设值注入在类中创建stter方法,在xml配置文件中创建bean元素,不同的bean用id来区分,id是自定义的可以随便写。
    bean里面有property属性是setter方法需要设置的属性,name是class的成员变量,value是指定的值,如果是引用的bean,则需要指定 ref而不是value
    4、构造器注入在类中需要创建相应的构造器,xml配置文件中设置属性,同上,id用来定位,value用来指定值,ref指定引用。
    5、自动注入同使用setter方法,只是需要指定bean实例的可以省略,ByType通过class定位,ByName通过name定位。
    6、依赖从https://mvnrepository.com/网址查找拷贝到pom.xml文件。亦可手动下载jar包拷贝到项目并设置为依赖。

    有了计划记得推动,不要原地踏步。
  • 相关阅读:
    Quartz快速入门 (转自 http://www.blogjava.net/baoyaer/articles/155645.html)
    C#HTML 转文本及HTML内容提取
    创建连接字符串方法
    源生js _AJax
    .NET里面附件上传大小限制的控制
    错误记录 COM
    Quartz的cron表达式
    Quartz 多任务调用
    Myeclipse的web工程和Eclipse互相转换
    Myeclipse8.0序列号生成程序
  • 原文地址:https://www.cnblogs.com/amnotgcs/p/13646260.html
Copyright © 2020-2023  润新知