Spring学习(一)——装配bean(1)

自动化装配bean

在便利性方面最强大的是Spring的自动化配置,我感觉这个也确实是用起来最方便的

首先,Spring是从两个角度来实现自动化装配:

  1. 组件扫描:Spring会自动发现应用上下文中所创建的bean
  2. 自动装配:Spring自动满足bean之间的依赖

下面来看Spring是如何创建bean,如何扫描bean,又如何装配的,我们以CD为例子

  1. 创建bean
  2. 我们先定义CD这个接口,CD中有一个play功能

    package soundsystem;
    
    public interface CompactDisc {
        void play();
    }
    

    然后我们来实现这个接口,就弄一个叫Lemon的CD吧

    package soundsystem;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class Lemon implements CompactDisc {
        private String title = "Lemon";
        private String artist = "米津玄师";
        public void play()
        {
            System.out.println("Playing " + title + " By " + artist);
        }
    }

    应该很容易发现一个特别的东西,就是@Component注解,这个注解表明这个类会作为组件类,并告知Spring要我这个类创建bean,不过组件扫描默认是不启用的,所以我们要显示配置一下Spring,从而让它去找到那些带有@Component注解的类,并为其创建bean

    那么接下来就是启用组件扫描去找到这个Lemon类了(顺带一提,下面的CDPlayer也是靠这个类去扫描的,因为都在一个包中),这个过程也非常简单,我们写一个配置类即可
package soundsystem;

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

@Configuration
@ComponentScan
public class CDPlayerConfig {
}

我们只要添加一个@Configuration注解和一个@ComponentScan注解即可,@Configuration注解表明这个类是一个配置类,而@ComponentScan则是启动组件扫描,如果没有其他配置,@ComponentScan会默认扫描与配置类相同的包,如果你想扫描其他的包的话有下面三种方式

@ComponentScan("soundsystem")   //包名
@ComponentScan(basePackages = {"soundsystem","test"})   //包名
@ComponentScan(basePackageClasses = {SgtPeppers.class, Lemon.class})    //类名

3.接下来我们把这张《Lemon》CD放到(注入)CDPlayer中去

package soundsystem;

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

@Component
public class CDPlayer {
    private CompactDisc cd;

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

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

@Autowired是自动装配

4.最后我们来验证一下自动装配是否成功了,创建一个CDPlayerTest类

package soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
   @Autowired
    private CDPlayer cdp;

    @Test
    public void cdShouldNotBeNull()
    {
        assertNotNull(cdp);
        cdp.play();
    }
}

 我这里是用的Junit测试单元测试的@RunWith就是告诉Spring,这个用JUnit4来测试,@ContextConfiguration则是告诉Spring配置类在是哪个,最后运行的结果:

通过运行和输出的结果我们可以知道bean的自动装配成功了 ,以上就是Spring自动装配bean 的过程,下一篇会写利用Java代码装配bean和XML装配bean。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值