• 我的第一个Spring程序


    先上一张结构图

    image

    首先明确目标 我们需要一辆车,车有一个行驶(driver)的方法;

    package com.cn.rambo.bean;
    
    public class Car {
        private Engine engine;//引擎
        private Tire tire;//轮胎
        private String model;
        
        public Car() {
            super();
        }
        
        public Engine getEngine() {
            return engine;
        }
    
        public void setEngine(Engine engine) {
            this.engine = engine;
        }
    
        public Tire getTire() {
            return tire;
        }
    
        public void setTire(Tire tire) {
            this.tire = tire;
        }
    
        public String getModel() {
            return model;
        }
        public void setModel(String model) {
            this.model = model;
        }
        
        public void driver(){
            this.engine.strat();
            this.tire.roll();
            System.out.println("3.汽车行驶");
        }
        
    }

    car有两个重要对象 Engine(引擎)、Tire(轮胎);只有引擎点了火,轮胎才可以滚动,汽车才可以行驶

    引擎是一个接口,有一个strat(点火)的方法,有两个实现类;

    package com.cn.rambo.bean;
    
    public interface Engine {
        public void strat();
    }

    引擎实现类1 (自动发送机)

    package com.cn.rambo.bean;
    
    public class EngineAuto implements Engine {
        private String name;
    
        public EngineAuto() {
            super();
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public void strat(){
            System.out.println("1.自动挡 发动机启动");        
        }
    
    }

    引擎实现类2 (手动发动机)

    package com.cn.rambo.bean;
    
    public class EngineManual implements Engine {
        private String name;
    
        public EngineManual() {
            super();
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public void strat(){
            System.out.println("1.手动挡 发动机启动");        
        }
    
    }

    轮胎也是一个接口,有一个roll(滚动)的方法,有两个实现类;

    package com.cn.rambo.bean;
    
    public interface Tire {    
        public void roll();
    }

    轮子实现类1 (15寸)

    package com.cn.rambo.bean;
    
    public class Tire15R implements Tire{
        private String name;
    
        public Tire15R() {
            super();
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public void roll(){
            System.out.println("2. 15吋 轮胎滚动");
        }    
    }

    轮子实现类1 (18寸)

    package com.cn.rambo.bean;
    
    public class Tire18R implements Tire{
        private String name;
    
        public Tire18R() {
            super();
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        public void roll(){
            System.out.println("2. 18吋 轮胎滚动");
        }    
    }

    在src目录下建一个 applicationContext.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"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
                
        <bean id="engine" class="com.cn.rambo.bean.EngineManual">
            <property name="name"><value>发动机1</value></property>
        </bean>
        
        <bean id="engine2" class="com.cn.rambo.bean.EngineAuto">
            <property name="name"><value>发动机2</value></property>
        </bean>
        
        <bean id="tire" class="com.cn.rambo.bean.Tire15R">
            <property name="name"><value>米其林1</value></property>
        </bean>
        
        <bean id="tire2" class="com.cn.rambo.bean.Tire18R">
            <property name="name"><value>米其林2</value></property>
        </bean>
        
        <!-- 前面4个Bean是对实现类的注入 下面是将引擎和轮胎注入到car中 -->
        <bean id="car" class="com.cn.rambo.bean.Car">
            <property name="model"><value>AE_86</value></property>
            <property name="engine"><ref bean="engine2"/></property>
            <property name="tire"><ref bean="tire2"/></property>
        </bean>
        
    </beans>

    测试:

    package com.cn.rambo.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.cn.rambo.bean.Car;
    
    public class Test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            //
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            //
            Car c = (Car) ctx.getBean("car");
            c.driver();    
            
        }
    
    }

    运行结果如下:

    1.自动挡 发动机启动
    2. 18吋 轮胎滚动
    3.汽车行驶

    如果来改动xml文件,不改变任何代码 如下两个地方:

    image

    运行结果如下:

    1.手动挡 发动机启动
    2. 15吋 轮胎滚动
    3.汽车行驶

    这个程序就简单的运用到了Spring的注入,和java的多态知识; 这样一来我们只需要修改少量代码,或者不修改java代码只修改配置文件的情况下就可以实现不同逻辑运算方法;这也是非常普遍的用法;

    The End!
  • 相关阅读:
    生日蜡烛
    生日蜡烛
    Angular2 and Electron
    NW.js and Electron compared
    Github发布了为桌面应用开发而生的Electron 1.0版本(HTML、CSS和JavaScript)
    哈佛——教育
    国家的强大——小学教师
    (OK)(OK) Fedora23——NS3(MANETs)——Docker(busybox)——genymotion(android)——All is OK
    (OK) ns3—genymotion—android
    android——adb shell——netcfg——get IP address
  • 原文地址:https://www.cnblogs.com/jr1260/p/6431476.html
Copyright © 2020-2023  润新知