zoukankan      html  css  js  c++  java
  • Spring基础知识之装配Bean

    装配(wiring):创建应用对象之间协作关系的行为。这是依赖注入的本质。

    Spring配置的可选方案

      Spring提供了三种装配机智:

        1)在XML中进行显示装配

        2)在java中进行显示装配

        3)隐式Bean发现机制和自动装配


     

    自动化装配

      Spring从两个角度来实现自动化装配:

        1)组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。

        2)自动装配(autowiring):Spring自动满足bean之间的依赖。

      创建可被发现的bean

      案例:使用CD与CD播放器来实现为什么有注入跟依赖。

      CD:作为一个接口,定义了CD播放器对CD的一系列操作,同时将CD播放器与CD本身的耦合降到最低

    public interface CompactDisc {
        void play();
    }

      CD的具体实现:

      注:@Component。这个注解表明该类会作为组件类,并告知Spring要为这个类创建bean。

    @Component
    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);
        }
    }

      配置组件扫描类:

      注:@ComponentScan,该注解会默认扫描配置类的包及其子包下所有带有@Component的类

        如果使用XML格式的话使用:<context: component-scan>元素

    @ComponentScan
    @Configuration
    public class CDPlayerConfig {
    }

      测试类代码:

      注:@ContextConfiguration会告诉它需要在CDPlayerConfig中加载配置,而CDPlayerConfig包含注解@ComponentScan,会对其包及其子包下的所有带有@Component类扫描,并为其生成bean

    @ContextConfiguration(classes = CDPlayerConfig.class)
    public class CDplayerTest {
    
        @Autowired
        private CompactDisc compactDisc;
    
        @Test
        public void Test() {
            compactDisc.play();
        }
    }

     

      为组件扫描的bean命名

      Spring应用上下文中所有的bean都会给定一个ID。默认是小写类名。

      若想改变这个ID:只要修改注解即可

    @Component("myselfBean")
    public class SgtPeppers implements CompactDisc {
    。。。
    }

     

      设置组件扫描的基础包

        我们目前没有为@ComponentScan设置任何属性,默认会以配置类所在的包为基础包来扫描组件。

        可以通过以下设置扫描包名称:

    @Configuration
    @ComponentScan("com")
    public class CDPlayerConfig {
    }

        若想指明基础包:

    @Configuration
    @ComponentScan(basePackages = "com")
    public class CDPlayerConfig {
    }

        还可以扫描多个基础包:

    @Configuration
    @ComponentScan(basePackages = {"com","cn"})
    public class CDPlayerConfig {
    }

        还提供了另一种方法,将指定为包中所包含的类或接口:

        注:可以为一定要扫描的包中创建一个专门用于扫描的组件类,

    @Configuration
    @ComponentScan(basePackageClasses = {CDPlayerConfig.class, Test.class})
    public class CDPlayerConfig {
    }

     

      通过为bean添加注解实现自动装配

        自动装配:Spring自动满足bean依赖的一种方式。可以借助@Autowired实现自动装配。

    @Component
    public class CDPlayer implements MediaPlayer{
        @Autowired
        private CompactDisc compactDisc;
    
        public void play() {
            compactDisc.play();
        }
    }

    通过java代码装配bean

    创建配置类

      注:@Configuration表明该类是一个配置类,该类应该包含Spring应用上下文中如何创建bean的细节。

    @Configuration
    public class CDPlayerConfig {
    }

    声明简单的bean

      注:@Bean会告诉Spring返回的对象是Spring应用上下文的bean。@Bean的name属性可以设置其名称,默认情况下名称与方法名一致。

    @Configuration
    public class CDPlayerConfig {
        @Bean
        public CompactDisc getCompactDisc() {
            return new SgtPeppers();
        }
    }

    XML格式的就不在记录

     

  • 相关阅读:
    位图 与矢量图对比
    用ocam工具录视频及转换视频 ffmpeg
    教学设计-饭后百步走
    教学设计例--跟小猴子一起玩
    教学设计-妈妈跳舞
    教学设计--Scratch2.0入门介绍
    Scratch2.0在线注册用户并使用帮助
    下载Scratch2.0离线版并安装教程
    把Sratch作品转为swf文件
    跟小猴子开心玩
  • 原文地址:https://www.cnblogs.com/lilinzhiyu/p/8118414.html
Copyright © 2011-2022 走看看