zoukankan      html  css  js  c++  java
  • (八)装配Bean(2)

    二、在Java类中进行显式的装配

    • 显式配置有两种:

         1. 一种是在java(本文讲解)

         2. 另一种是xml配置文件(第一章有讲)

    案例一: 使用java显式装配+@autowired自动装配的方式

    • 定义接口 CD.java
    package bean;
    
    public interface CD {
        void play();
    }
    • 接口的实现类1  CD1.java
    package bean;
    
    import org.springframework.stereotype.Component;
    
    public class CD1 implements CD {
    
        @Override
        public void play() {
            System.out.println("我是CD11");
        }
    
    }
    • 接口的实现类2  CD2.java
    package bean;
    
    import org.springframework.stereotype.Component;
    
    public class CD2 implements CD {
    
        @Override
        public void play() {
            System.out.println("我是CD22");
        }
    
    }
    • CDPlayer .java
    package bean;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    public class CDPlayer {
        @Autowired
        private CD cd1;
    
        public void play() {
    
            cd1.play();
        }
    
    }
    • 编写java显式配置类 CDConfig.java
    package bean;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration  //指定这个雷氏一个配置类,相当于spring xml配置文件中的<beans>标签
    public class CDConfig {
        
        @Bean  //该注解会告诉spring该方法会返回一个对象,且该对象会注册为spring应用杀光你下文的bean。 默认下,
                //bean的id与该方法的方法名一样,@Bean(name="")进行修改id名
        public CD cd1(){
            return new CD1();
        }
        
        @Bean    //该注解会告诉spring该方法会返回一个对象,且该对象会注册为spring应用杀光你下文的bean。 默认下,
                //bean的id与该方法的方法名一样,@Bean(name="")进行修改id名
        public CD cd2(){
            return new CD2();
        }
        
        @Bean    //该注解会告诉spring该方法会返回一个对象,且该对象会注册为spring应用杀光你下文的bean。 默认下,
                //bean的id与该方法的方法名一样,@Bean(name="")进行修改id名
        public CDPlayer cdPlayer(){
            return new CDPlayer();
        }
        
    }
    • 编写测试类
    package test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import bean.CDConfig;
    import bean.CDPlayer;
    
    public class Test {
        public static void main(String[] args) {
            
            ApplicationContext context=new AnnotationConfigApplicationContext(CDConfig.class);
            CDPlayer cdplayer=(CDPlayer)context.getBean("cdPlayer");
            cdplayer.play();
            
            
        }
    }

    结果:



    案例二: 使用java显式装配+javaConfig手动注入的方式

    • 定义接口CD.java
    package interfacepackage;
    
    public interface CD {
        void play();
    }
    • 定义接口player.java
    package interfacepackage;
    
    //定义一个播放器接口
    public interface player {
        void play();
    }
    • 定义播放器接口的实现类  CDPlayer .java
    package bean;
    
    import interfacepackage.CD;
    import interfacepackage.player;
    
    //创建一个CD播放器,需要一个CD才能播放
    public class CDPlayer implements player {
    
        private CD cd;
    
        public CDPlayer(CD cd) {
            this.cd = cd;
        }
    
        @Override
        public void play() {
    
            cd.play();
        }
    
    }
    • 定义CD接口的实现类 Music_CD.java
    package bean;
    
    import interfacepackage.CD;
    
    //创建一个音乐CD
    public class Music_CD implements CD {
    
        @Override
        public void play() {
            System.out.println("我是音乐CD");
    
        }
    
    }
    • 定义CD接口的实现类 Movie_CD.java
    package bean;
    
    import interfacepackage.CD;
    
    //创建一个电影CD
    public class Movie_CD implements CD {
    
        @Override
        public void play() {
            System.out.println("我是电影CD");
    
        }
    
    }
    • 定义java配置类 CDPlayerConfig.java
    package config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import bean.CDPlayer;
    import bean.Movie_CD;
    import bean.Music_CD;
    
    //该配置使用java显式配置
    @Configuration
    public class CDPlayerConfig {
    
        @Bean()  //该注解告诉spring该方法会返回一个对象,且该对象会被注册为spring应用上下文的bean。
                    //默认下,该bean的id与方法名一样,可通过@Bean(name="") 设置bean的id名
        public Music_CD musci_cd() {
    
            return new Music_CD();
        }
    
        @Bean
        public Movie_CD movie_cd() {
            return new Movie_CD();
        }
    
        @Bean
        public CDPlayer cdPlayer() {
            return new CDPlayer(movie_cd());   //要创建CDPlayer对象其构造方法必须传入一个CD对象,调用movie_cd()
                                                //创建一个Movie_CD对象,也可以调用musci_cd()方法
        }
    
    }
    • 编写测试类Test.java
    package test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    import config.CDPlayerConfig;
    import bean.CDPlayer;
    
    public class Test {
        public static void main(String[] args) {
            
            ApplicationContext context=new AnnotationConfigApplicationContext(CDPlayerConfig.class);
            CDPlayer cdplayer=(CDPlayer)context.getBean("cdPlayer");
            cdplayer.play();
            
            
        }
    }

    结果:

    •  注意 : 默认情况下,spring的bean都是单例的,在java配置类中,

    如果有多个CDPlayer类调用movie_cd()方法来获取Movie_cd对象,都是同一个Movie_cd对象。

    •  一般情况下,我们不用上图所示的方法来实现依赖。改造上图代码,即修改java配置类 CDPlayerConfig.java 其他文件都不变
    package config;
    
    import interfacepackage.CD;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import bean.CDPlayer;
    import bean.Movie_CD;
    import bean.Music_CD;
    
    //该配置使用java显式配置
    @Configuration
    public class CDPlayerConfig {
    
        @Bean()  //该注解告诉spring该方法会返回一个对象,且该对象会被注册为spring应用上下文的bean。
                    //默认下,该bean的id与方法名一样,可通过@Bean(name="") 设置bean的id名
        public Music_CD musci_cd() {
    
            return new Music_CD();
        }
    
        @Bean
        public Movie_CD  cd() {
            return new Movie_CD();
        }
    
        @Bean
        public CDPlayer cdPlayer(CD cd) {
            return new CDPlayer(cd);   //cdPlayer方法请求一个参数为CD类型的参数,当spring调用cdPlayer方法创建CDPlayer
                                //对象的时候,会自动装配一个CD到配置方法之中。
        }
    
    }
  • 相关阅读:
    OpenCV_Python —— (6)图像色彩空间
    OpenCV_Python —— (5)图像模糊/平滑/滤波
    Java 14 祭出增强版 switch,真香!!
    推荐 9 个 爱不释手的 JSON 工具!
    从 0 开始手写一个 Mybatis 框架,三步搞定!
    Java常用的几个Json库,性能强势对比!
    Oracle JDK 和 OpenJDK 有什么区别?
    极客时间-左耳听风-程序员攻略-UI/UX设计
    OpenCV导向滤波(引导滤波)实现(Guided Filter)代码,以及使用颜色先验算法去雾
    python面向对象小练习
  • 原文地址:https://www.cnblogs.com/shyroke/p/6847344.html
Copyright © 2011-2022 走看看