前面介绍完了组件扫描和自动装配,这里再来看一下装配bean的另一种方式JavaConfig。

包路径:

src/main/java

com.bonc-|--config--|--CDPlayerConfig.java (配置类)

|--pojo--- |--CompactDisc.java    (接口CompactDisc)

|--SgtPeppers.java      (类SgtPeppers实现了CompactDisc)

|--MediaPlayer.java      (接口 MediaPlayer)

|--CDPlayer.java          (类CDPlayer实现了MediaPlayer)

接口 CompactDisc.java

package com.bonc.pojo;

public interface CompactDisc {
    void  play();
}

实现类 SgtPeppers.java

package com.bonc.pojo;

public class SgtPeppers implements CompactDisc {

    private String title = "Sgt. Pepper's Lonely Hearts Club Band";
    private String artist = "The Beatles";
    public void play() {
            System.out.println("Playing "+title+"by"+artist);
    }

}

接口 MediaPlayer.java

package com.bonc.pojo;

public interface MediaPlayer {
    void play();
}

实现类CDPlayer.java

package com.bonc.pojo;

public class CDPlayer implements MediaPlayer{

    private CompactDisc cd;

    public CDPlayer(){
        super();
    }

    public CDPlayer(CompactDisc cd){
        this.cd = cd;
    }
    public void play() {
        cd.play();
    }

    public void setCd(CompactDisc cd) {
        this.cd = cd;
    }
}

配置类:(核心内容)

package com.bonc.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.bonc.pojo.CDPlayer;
import com.bonc.pojo.CompactDisc;
import com.bonc.pojo.SgtPeppers;
/*
 * 背景信息:
 *    很多场景下,推荐组件扫描、自动装配。但有些第三方组件是不方便装配的,因此需要显示配置,
 *    显示配置有两种JavaConfig或XML。
 *    进行显示配置,JavaConfig是更好的方案,因为它更加强大、类型安全、易于重构。
 *
 * JavaConfig:
 *    1.@Configuration表明这是一个配置类,该类应该包含Spring上下文如何创建bean的细节。
 *    2.尽管我们可以同时使用组件扫描和显示配置,但在这里我们更加关注显示配置,
 *    3.因此我们将CDPlayerConfig的@ComponentScan注解移除掉了。
 *    4.JavaConfig是配置代码,意味着它不应该包含任何业务逻辑,也不应该侵入到业务代码中。
 *    5.通常会将JavaConfig放到单独的包中,使它与其他应用程序逻辑分离开。
 *
 * */

@Configuration
public class CDPlayerConfig {

    /*
     * 方法说明:
     * @Bean注解告诉Spring这个方法将会返回一个CompactDisc类型的对象,该对象要注册为Spring应用上下文中的bean
     * 方法体包含了最终产生bean实例的逻辑。
     * ID:
     * 默认情况下,bean的ID与带有@Bean注解的方法名是一样的,在本实例中,bean的默认是sgtPeppers
     * 如果要自定义bean的ID,可以设name属性。
     *
     *
     * */
    @Bean
    public CompactDisc sgtPeppers(){
        return new SgtPeppers();
    }
    /*
     * JavaConfig中装配bean的最简单方式就是引用创建bean的方法
     * 方法说明:
     * cdPlayer没有使用默认的构造器创建实例,而是调用了sgtPeppers()
     * Spring会拦截sgtPeppers()的调用,来确保sgtPeppers的单例
     * 每次调用sgtPeppers都返回同一个实例
     *
     * */
    @Bean
    public CDPlayer cdPlayer(){
        return new CDPlayer(sgtPeppers());
    }

    /*
     * 更为简单的方式,cdPlayer请求一个CompactDisc作为参数,
     * 通过这种方式引用其他的bean是最佳的选择,因为它不会要求sgtPeppers()方法在同一个配置类中
     * 甚至没有要求CompactDisc要在JavaConfig中声明
     * 实际上它可以通过组件扫描或XML配置进行配置
     * 你可以将配置分散到多个配置类、XML文件、以及自动扫描和装配bean中,只要功能健全即可。
     * */
    @Bean
    public CDPlayer cdPlayer(CompactDisc cd){
        return new CDPlayer(cd);
    }

    /*
     * 还可以通过其他风格实现DI功能,不限于构造器和setter方法
     * */
    @Bean CDPlayer cdPlayer2(CompactDisc compactDisc){
        CDPlayer cdPlayer = new CDPlayer();
        cdPlayer.setCd(compactDisc);
        return cdPlayer;
    }

}

【Spring 核心】装配bean(二) JavaConfig装配的更多相关文章

  1. Spring装配Bean之XML装配bean

    在Spring刚出现的时候,XML是描述配置的主要方式,在Spring的名义下,我们创建了无数行XML代码.在一定程度上,Spring成为了XML的同义词. 现在随着强大的自动化配置和Java代码的配 ...

  2. Spring入门(三):通过JavaConfig装配bean

    上一篇博客中,我们讲解了使用组件扫描和自动装配实现自动化装配bean,这也是最好的使用方式. 但是某些场景下,我们可能无法使用自动装配的功能,此时就不得不显式的配置bean. 比如我们引用了一个第三方 ...

  3. Spring_总结_03_装配Bean(二)_Java配置

    一.前言 本文承接上一节:Spring_总结_03_装配Bean(一)之自动装配 上一节提到,装配Bean有三种方式,首先推荐自动装配.当自动装配行不通时,就需要采用显示配置的方式了. 显示配置有两种 ...

  4. Spring基础篇——bean的自动化装配

    上篇博文讲Spring的IOC容器时说道,虽然容器功能强大,但容器本身只是个空壳,需要我们主动放入装配对象,并告诉它对象之间的协作关系,然后容器才能按照我们的指示发挥它的魔力,完成装配bean的使命. ...

  5. java之Spring(IOC)装配Bean(手动装配、自动装配、注解装配)

    在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 <bean id="todo" cla ...

  6. Spring基础09——Bean的自动装配

    1.XML配置的Bean自动装配 SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,而不需要手工去指定要装配的Bean,a ...

  7. 第2章—装配Bean—通过XML装配Bean

    通过XML装配Bean ​ 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...

  8. SpringInAction--自动化装配Bean(显示装配之xml配置)

    Spring在配置时候有三种方案可选 1.在xml中进行显示配置 2.在java中进行显示配置 3.隐式的Bean发现机制和自动装配 今天学习的 第一种—— 在xml中进行显示配置 老规矩 先创建 C ...

  9. Spring核心概念(二)

    IOC/DI IOC(控制反转):对象(组件)的创建由代码中转移到外部容器(XML,注解) . DI(依赖注入):当类A需要使用类B时,那么我们需要为类A的属性赋值类B的对象. 这种现象我们称为依赖注 ...

  10. 二、Spring装配Bean

    内容 声明bean 构造器注入和Setter方法注入 装配Bean 控制bean的创建和销毁 关键词 装配(wiring) 组件扫描(component scanning) 自动装配(AutoWiri ...

随机推荐

  1. KMP算法(研究总结,字符串)

    KMP算法(研究总结,字符串) 前段时间学习KMP算法,感觉有些复杂,不过好歹是弄懂啦,简单地记录一下,方便以后自己回忆. 引入 首先我们来看一个例子,现在有两个字符串A和B,问你在A中是否有B,有几 ...

  2. CJOJ 2482 【POI2000】促销活动

    CJOJ 2482 [POI2000]促销活动(STL优先队列,大根堆,小根堆) Description 促销活动遵守以下规则: 一个消费者 -- 想参加促销活动的消费者,在账单下记下他自己所付的费用 ...

  3. STL—内存的配置与释放

    上一篇我们介绍了STL对象的构造与析构,这篇介绍STL内存的配置与释放. STL有两级空间配置器,默认是使用第二级.第二级空间配置器会在某些情况下去调用第一级空间配置器.空间配置器都是在allocat ...

  4. 使用Vue-resource完成交互

    使用vue-resource 引入vue-resource vue-resource就像jQuery里的$.ajax,是用来跟后端交互数据的,vue-resource是vue的一个插件,所以我们在开始 ...

  5. apt-get 安装ubuntu-tweak

    Ubuntu Tweak是一款专门为Ubuntu(GNOME桌面)准备的配置.调整工具.主要面向新手级的普通用户.它可以设置很多并不能在系统首选项中设置的隐藏选项,以满足用户自定义的乐趣.即使是新手, ...

  6. [luogu P2184] 贪婪大陆 [树状数组][线段树]

    题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁. 小 ...

  7. ajax-post请求

    一般来说字符串读取不出来查看下面这行代码是否加上: xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencode ...

  8. sql ————视图

    视图与表的区别: 区别:1.视图是已经编译好的sql语句.而表不是 2.视图没有实际的物理记录.而表有. 3.表是内容,视图是窗口 4.表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可 ...

  9. Python简易爬虫爬取百度贴吧图片

    通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...

  10. Dinic算法(研究总结,网络流)

    Dinic算法(研究总结,网络流) 网络流是信息学竞赛中的常见类型,笔者刚学习了最大流Dinic算法,简单记录一下 网络流基本概念 什么是网络流 在一个有向图上选择一个源点,一个汇点,每一条边上都有一 ...