【Spring实战4】04---装配Bean(自动装配)

主要内容:

  • 声明Bean
  • 构造器注入和Setter方法注入
  • 装配Bean
  • 控制bean的创建和销毁

Spring装配Bean的3种机制

  • 在XML中进行显式配置
  • 在Java中进行显式配置
  • 隐式的bean发现机制和自动装配

1、自动化装配Bean,
组件扫描:spring会自动发现应用上下文所创建的Bean

自动化装配:Spring自动满足bean之间的依赖

例:CD需要插入Cd播放器中,那么cd才可以播放或者或者说注入,以spring编写

定义Cd的概念,实现CompactDisc接口

package nh.spring.ioc.beans;

/**
 * Created by niuh on 11/2/2016.
 */
public interface CompactDisc {
    void play();
}

Cd可以有很多实现类,比如某人的某个专辑,用@Component注解完成实现类

package nh.spring.ioc.beans;

import org.springframework.stereotype.Component;

/**
 * Created by niuh on 11/2/2016.
 */

@Component
public class sgtPappers implements CompactDisc {
    private String title = "nice!!!!!!!";
    private String artist = "heng";

    @Override
    public void play() {
        System.out.print("title is " + title + " by " + artist);
    }
}

@Component注解,表面该类是个组件类,告知Spring要为这个类自动创建bean,不过默认组件扫描是不启用的,利用@ComponentScan启用组件扫描

package nh.spring.ioc.beans;

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

/**
 * Created by niuh on 11/2/2016.
 *
 */

@Configuration
@ComponentScan
public class CdPlayConfig {
}

整理一下,类CdPlayConfig在实例化时,通过java定义的spring装配规则,@ComponentScan注解在Spring中启用组件扫描,默认扫描与配置类相同的包,以及子包。查找所有带有@Component注解的类,这样就能找到CompactDisc,并为其创建一个Bean,完成组件扫描与自动装配。

在上面代码中Spring应用上下文会为Bean自动分配一个id,规则为首字母小写,如果期望可以自定义id,则如下:

@Component("myId")

也可以使用java依赖注入中提供@Named设置ID

@Named("myId")

通过ComponentScan的basePackages属性设置自动扫描的包

@ComponentScan(basePackages = "nh.spring.ioc")

最后通过注解为bean实现自动装配

package nh.spring.ioc.beans;

import org.springframework.beans.factory.annotation.Autowired;

/**
 * Created by niuh on 11/2/2016.
 */
public class CDplay implements MediaPlayer {
    private CompactDisc cd;

    @Autowired
    public CDplay(CompactDisc cd) {
        this.cd = cd;
    }

    @Override
    public void play() {
        cd.play();
    }
}

使用Spring应用上下文寻找匹配摸个bean需求的其他bean,例子中表面Spring创建Cdplay时,会通过构造器来进行实例化并要找到一个CompactDisc类型的bean;

原文地址:https://www.cnblogs.com/hylinux/p/6023850.html