SpringAction学习一、装配bean:自动装配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MASORL/article/details/82624338

自动装配的步骤为:

(1)普通的接口

(2)实现接口的类,使用@Component注解,告诉Spring需要为其创建bean(应该叫做创建组件类)

(3)开启组件扫描,为组件类创建bean

(4)通过@Autowried注解,自动注入到成员变量或方法参数中

具体代码:

接口1

package com.spring.action.autoconfig;

/**
 * 一个光盘接口
 */
public interface CompactDisc {
    void sing();//光盘的sing功能
}

接口1实现,使用@Component注解,表示组件类,会在spring 中创建bean

package com.spring.action.autoconfig;

import org.springframework.stereotype.Component;

/**
 * CompactDisc实现类
 */
@Component
public class SgtPeppers implements CompactDisc {
    public void sing() {
        System.out.println("sgtPeppers的sing方法");
    }
}

接口2

package com.spring.action.autoconfig;

/**
 * 一个光盘接口
 */
public interface CompactDisc {
    void sing();//光盘的sing功能
}

接口2实现

在构造器方法上使用了@Autowired标注,参数CompactDisc将由spring 中的bean来自动注入

package com.spring.action.autoconfig;

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

@Component
public class CDPlayer implements  MediaPlayer{
    private CompactDisc compactDisc;

    @Autowired
    public CDPlayer(CompactDisc compactDisc){
        this.compactDisc = compactDisc;
    }
    public void play() {
        System.out.println("播放器开始播放");
        compactDisc.sing();
    }
}

配置类

@Configuration 注解:表明该类为注解类

@ComponentScan注解:启动组件扫描功能,没有参数的@ComponentScan,默认扫描配置类同包下的组件

package com.spring.action;


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

@Configuration
@ComponentScan
public class JavaConfig {

}

ok,以上几步,一个Spring的简单自动装配完成,如何测试?

CompactDiscTest为一个测试类

@RunWith(StringJunit4ClassRunner.class): 使用SpringJunit4ClassRunner.class,可以在测试开始的时候自动创建Spring的应用上下文

@ContextConfiguration: 表示加载配置,有几种加载的方式,这里,选用的是加载配置类。

@Autowired : 当变量上修饰了这个注解时,Spring会自动将创建号的bean赋值过去。

package com.spring.action;

import com.spring.action.autoconfig.CDPlayer;
import com.spring.action.autoconfig.CompactDisc;
import com.spring.action.autoconfig.JavaConfig;
import com.spring.action.autoconfig.MediaPlayer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//使用SpringJUnit4ClassRunner,可以在测试开始的时候自动创建Spring的应用上下文
@RunWith(SpringJUnit4ClassRunner.class)
//导入配置
@ContextConfiguration(classes = JavaConfig.class)
public class AutoconfigTest {
    @Autowired
    private CompactDisc compactDisc;

    @Autowired
    private MediaPlayer mediaPlayer;
    @Test
    public void play() {
        mediaPlayer.play();
    }
}

测试结果:可以看见,成功运行了sgtPeppers的实现方法

WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
播放器开始播放
sgtPeppers的sing方法

猜你喜欢

转载自blog.csdn.net/MASORL/article/details/82624338