五、自动化装配bean

Spring配置的可选方案

当描述spring如何进行装配的时候,spring提供了很大的灵活性,它提供了三种主要的装配机制:


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

在很多场景下选择哪种配置方式,取决于自己的喜好。
建议
尽可能的使用自动装配的机制。显式的声明越少越好。当必须声明的时候建议使用类型安全并且比xml强大的Javaconfig。只有当想使用便利的xml命名空间,并且在javaConfig中没有实现,才使用xml。

自动装配bean

Spring从两个角度来实现自动化装配:
- 组件扫描:Spring会自动发现应用上下文中所创建的bean。
- 自动装配:Spring自动满足bean之间的依赖

创建可发现的bean

创建接口

package com.lf.service;

/**
 * Created by LF on 2017/5/1.
 */
public interface CompactDisc {
    void play();
}

创建接口的实现

package com.lf.service.impl;

import com.lf.service.CompactDisc;
import org.springframework.stereotype.Component;

/**
 * Created by LF on 2017/5/1.
 */
@Component
public class CompactDiscImpl implements CompactDisc {
    @Override
    public void play() {
        System.err.println("唱歌");

    }
}

启用组件扫描

package com.lf;

import com.lf.service.impl.CompactDiscImpl;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * Created by LF on 2017/5/1.
 */
@Configuration
@ComponentScan(basePackageClasses = {CompactDiscImpl.class})
public class JavaConfig {
}

测试代码

package com.lf;


import com.lf.service.CompactDisc;
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;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
public class AppTest {
    @Autowired
    private CompactDisc compactDisc;

    @Test
    public void T1() {
        compactDisc.play();
    }


}

设置组件扫描的基础包

@ComponentScan默认会扫描与配置类相同的包,以及子包
为了指定不同的基础包可以使用value属性

@ComponentScan("com.lf")

为了更明确清晰的表示为基础包,可以使用basePackages属性
basePackages为数组的形式,以String类型表示的,如果发生了代码重构,那么就可能发生错误。

@ComponentScan还提供了另外属性

@ComponentScan(basePackageClasses = {CompactDiscImpl.class})

你可能感兴趣的:(Spring的核心)