zoukankan      html  css  js  c++  java
  • Spring 装配

    有以下三种配置
    在xml中配置
    在java中配置
    bean自动装配

    自动装配

    这里以转载CD为例子

    首先需要建立CD概念

    即,定义一个cd接口

    只需要实现添加两个注解,

    package com.ming;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 定义cd接口
     * @author ming
     */
    @Configuration
    @ComponentScan
    public interface CompactDisc {
        /**
         * 规定方法为play
         */
        void play();
    }
    
    
    package com.ming;
    
    import org.springframework.stereotype.Component;
    
    /**
     *
     * @author ming
     */
    
    // 启用组件扫描
    @Component
    class SgtPeppers implements CompactDisc {
        private String title = "标题";
        private String artist = "内容";
        /**
         * 规定方法为play
         */
        @Override
        public void play() {
            System.out.println(this.artist + this.title);
        }
    }
    
    
    
    package com.ming;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import static org.junit.Assert.*;
    
    public class CompactDiscTest {
        private ApplicationContext applicationContext = null;
    
        @Before
        public void setUp() throws Exception {
            applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        }
    
        @After
        public void tearDown() throws Exception {
        }
    
        @Test
        public void play() {
            CompactDisc compactDisc = applicationContext.getBean(CompactDisc.class);
            assertNotNull(compactDisc);
        }
    }
    

    扫描的时候,会直接按照该类所在的包,作为基础包,进行扫描

    对依赖的实现自动装配

    添加注解以后,初始化bean以后,会尽可能的满足bean的依赖

    目录如下

    2019-05-21-01-50-05----

    package com.ming;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    /**
     *
     * @author ming
     */
    @Component
    public class CDPlay implements MediaPlayer {
        CompactDisc compactDisc = null;
    
        @Autowired
        public CDPlay(CompactDisc compactDisc){
            this.compactDisc = compactDisc;
        }
    
        /**
         * 规定方法为play
         */
        @Override
        public void play() {
            compactDisc.play();
        }
    }
    
    
    package com.ming;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 定义cd接口
     * @author ming
     */
    @Configuration
    @ComponentScan
    public interface CompactDisc {
        /**
         * 规定方法为play
         */
        void play();
    }
    
    
    package com.ming;
    
    import org.springframework.context.annotation.ComponentScan;
    
    /**
     * @author ming
     */
    @ComponentScan
    public interface MediaPlayer {
        /**
         * 规定方法为play
         */
        public void play();
    }
    
    
    package com.ming;
    
    import org.springframework.stereotype.Component;
    
    /**
     *
     * @author ming
     */
    
    // 启用组件扫描
    @Component
    class SgtPeppers implements CompactDisc {
        private String title = "标题";
        private String artist = "内容";
        /**
         * 规定方法为play
         */
        @Override
        public void play() {
            System.out.println(this.artist + this.title);
        }
    }
    
    
    <?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:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    	<context:component-scan base-package="com.ming"/>
    </beans>
    
    package com.ming;
    
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Rule;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import static org.junit.Assert.*;
    
    public class CompactDiscTest {
        private ApplicationContext applicationContext = null;
    
        @Before
        public void setUp() throws Exception {
            applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        }
    
        @After
        public void tearDown() throws Exception {
    
        }
    
        @Test
        public void play() {
            MediaPlayer mediaPlayer = (MediaPlayer) applicationContext.getBean(MediaPlayer.class);
            mediaPlayer.play();
            assertNotNull(mediaPlayer);
        }
    }
    

    运行结果

    2019-05-21-01-51-54----

    在这里,在装配的时候,尽量满足配置规则进行装配

    Java代码装配bean

    2019-05-21-02-18-11----

    package com.ming;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     *
     * @author ming
     */
    @Configuration  // 注解表明这是一个配置类
    public class CDPlayerConfig {
    
        @Bean
        public CompactDisc sgtPeppers(){
            // 此处进行装配
            return new SgtPeppers();
        }
    
        /**
         * 注入装配
         * @return
         */
        @Bean
        public CDPlay cdPlay(){
            return new CDPlay(this.sgtPeppers());
        }
    }
    
    
    在无知的道路上缓步前行
  • 相关阅读:
    keil 提示"running with code size limit 32k"
    关于C语言编译出现give arg types警告问题
    windows10添加设备管理器的快捷方式到桌面
    deepin20社区版 安装 STM32CubeIDE 小记
    STM32开发 printf和scanf函数的重定向——修改HAL标准库用printf函数发送数据直接输出
    ardupilot环境配置之eclipse指定jdk版本启动,解决“Version XXXX of the JVM is not ......"报错的问题
    jdk9,10,11,12没有jre安装方法
    C++ 类构造函数 & 析构函数
    STM32 Keil中关于stlink的调试 下载设置
    STM32 SWD下载出现no target connect解决方法
  • 原文地址:https://www.cnblogs.com/melovemingming/p/10908882.html
Copyright © 2011-2022 走看看