zoukankan      html  css  js  c++  java
  • Springboot学习笔记(3)——依赖注入之二(Java配置)

    Spring4之后推荐使用Java配置,同时也是Spring boot推荐的配置方式。

    Java配置是通过@Configuration和@Bean两个注解来实现的,其步骤同注解方式基本一致。

    1、编写Bean

    package com.red.demo.ioc;
    
    public class Screen {
      public String display(){
        return "我命由我不由天!";
      }
    }

    注意这就是一个普通的POJO类,并且不带任何注解。

    2、编写使用该Bean的类(被注入的类)

    package com.red.demo.ioc;
    
    public class Cinema {
      Screen nezha;
    
      public void setScreen(Screen screen){
        this.nezha = screen;
      }
      public String playMovie(){
        return nezha.display();
      }
    }

    这个也是普通的类,不带任何注解,这是增加了一个set方法。当然也可以通过构造方法注入,在配置做相应调整即可。

    3、编写配置类

    package com.red.demo.ioc;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class MovieConfig {
    
      @Bean
      public Screen screen(){ //和类名同名的方法
        return new Screen();
      }
    
      @Bean
      public Cinema Cinema(){ //和类名同名的方法
        Cinema cinema = new Cinema();
        cinema.setScreen(screen());
        return cinema;
      }
    }

    也可以直接这样写

    @Configuration
    public class MovieConfig {
    
      @Bean
      public Screen screen(){
        return new Screen();
      }
    
      @Bean
      public Cinema Cinema(Screen screen){
        Cinema cinema = new Cinema();
        cinema.setScreen(screen);
        return cinema;
      }
    }

    所有的注入信息都在这个配置类中配置。

    和注解方式比较,这里少了一个@ComponentScan注解,多了两个和相关类名的同名方法,并都冠以@Bean注解。

    4、运行

    package com.red.demo;
    
    import com.red.demo.ioc.Cinema;
    import com.red.demo.ioc.MovieConfig;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class DemoApplication {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MovieConfig.class);
            Cinema cinema = context.getBean(Cinema.class);
            System.out.println(cinema.playMovie());
            context.close();
        }

     【Why】关于为何在Spring4.x时,推荐使用Java配置,原因如下:

    转自:https://blog.csdn.net/chaleaoch_gmail/article/details/80475992

    曾经有段时间Java的生态圈走了极端,为了彻底的解耦,把“什么时候需要什么样的实现”这个问题的解决方案,写在配置文件(也就是xml里),因为xml不需要重新编译,因此达成了“彻底解耦”这个目标(我需要什么实现我就改配置文件就行了,不需要改代码,不需要重新编译),然而随着时间的发展,人们发现了以下问题 
    1. 大部分时候我们并不需要解耦的如此彻底,应用级程序甚至很少遇到要到要换接口实现。 
    2. xml的配置学习起来门槛太高了,就算老手看一个配置文件经常也能看的云里雾里,再加上xml文件不能做类型检查,有时候你实际上是把一个错误的类装配进接口,导致系统报错,你却要找半天错误。

    因此这几年提出了新的口号叫“约定大于配置”,javaconfig实际上就是约定大于配置的产物,它做的事情和xml配置几乎相同,但是因为有类型检查且本身就是java代码的原因,它的可读性和可维护性远高于xml配置,新手接手项目的门槛大大降低。而代价不过是放弃那天知道什么时候才可能用的上“彻底解耦”的能力。所以是值得的。

  • 相关阅读:
    linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
    Linux 删除文件夹和创建文件的命令
    linux下拷贝整个目录
    星云大师:这十句话 我受用一生
    dex
    瘋耔java语言笔记
    VCC_VID_VTT等的含义
    一位数码管引脚
    android从应用到驱动之—camera(2)---cameraHAL的实现
    android从应用到驱动之—camera(1)---程序调用流程[转]
  • 原文地址:https://www.cnblogs.com/tigerhsu/p/11334238.html
Copyright © 2011-2022 走看看