• 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());
        }
    }
    
    
    在无知的道路上缓步前行
  • 相关阅读:
    crontab机会任务监控
    Python 模块的一般处理
    MySQLdb autocommit
    MySQLdb callproc 方法
    Pthon MySQLdb 的安装
    CentOS7安装MySQL
    Linux中的网络
    Linux中的盘符问题
    类比的方法学习Performance_schema
    MySQL 设置数据库的隔离级别
  • 原文地址:https://www.cnblogs.com/melovemingming/p/10908882.html
Copyright © 2020-2023  润新知