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格式的就不在记录

 

posted @ 2017-12-26 16:19  萌新啊萌新是我  阅读(284)  评论(0编辑  收藏  举报