装配Bean——隐式的bean发现机制和自动装配

Spring具有强大的灵活性,它提供了三种主要的装配机制:

1.隐式的bean发现机制和自动装配;

2.java中进行显示配置;

3.XML中进行显示配置;

   建议尽可能的使用第一种自动配置的方式,显示配置越少越好。当必须要用显示配置的时候,推荐使用更加强大的JavaConfig

本节先对第一种进行介绍:

Spring从两个角度实现自动化装配:

1.组件扫描:也就是告诉spring哪些个类中需要spring来创建对象。

2.自动装配:Spring自动满足bean之间的依赖。

示例:

@Component
public class Dog implements Animals {
    public void run() {
        System.out.println("***");
    }
}

    上面的代码中类上使用了@Component注解,这个简单的注解表名这个类作为组件类,并告知Spring要为这个类创建bean。但是Spring并不知道要扫描哪个类,这个时候还需要我们配置一下Spring,告诉Spring,你要去扫描哪个类,去哪创建对象。这个配置有两种方法,我们先看第一种:

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

@Configuration
@ComponentScan
public class AnimalsConfig {
}

    注意到我们使用了@ComponentScan这个注解,我们还注意到这个类是和上面那个类是在同一个包下的。这个@ComponentScan注解能够启用组件的扫描,也就能够找到上面那个用@Component注解标识 的类。如果没有其它配置的话,@ComponentScan默认扫描与配置类相同的包。因此Spring会扫描test这个包,查找带有@Component注解的类,并且会在spring中为其创建一个bean

这是Spring启用组件扫描的一种方式,还有一种方式如下:

通过xml启用组件扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="test"/>
</beans>

使用<context:component-scan base-package=”test”/>可以让spring扫描这个包下的所有@Componet注解的类。实现与上面@ComponentScan同样的功能。

测试代码如下:

@Test
public void test02() {
    ApplicationContext ac = new AnnotationConfigApplicationContext(AnimalsConfig.class);
    Animals animals = ac.getBean(Animals.class);
    animals.run();

通过为bean添加注解实现自动装配

    自动装配就是让Spring自动满足bean依赖的一种方法,在满足依赖的过程中,会在Spring应用上下文中寻找匹配某个bean需求的其它bean。为了声明要进行自动装配,我们可以借助Spring@AutoWired注解。

@AutoWired注解的使用

有一个类如下:

@Component
public class Cat {

    @Autowired
    private Dog dog;
    public void aaa(){
        dog.run();
    }
}

测试代码如下:

@Test
public void test03() {
    ApplicationContext ac = new AnnotationConfigApplicationContext(AnimalsConfig.class);
    Cat cat = ac.getBean(Cat.class);
    cat.aaa();
}

依旧可以显示结果,因为我们在Dog类上使用了@Component,在这里我们在dog变量上使用了@AutoWired注解,所以Spring容器为我们注入了Dog对象,所以可以执行。

下一节,我们来看看第二种装配方案java中进行显示配置。









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值