Spring5学习(三)——实现Bean的自动装配


前言

  • Bean的装配方式有三种:
  1. .xml文件中显示配置。
  2. 在Java中显示配置。
  3. 隐式自动配置。
  • 自动装配目的:无需再手动指定property中传入的属性值

一、byName实现自动装配

  • 方法:在xml文件中添加 <bean id="xxx" class="xxx" autowire="byName">
  • 注意: byName会自动在容器上下文查找和bean对象set方法传入参数值一致的bean id,使用时需保证bean的id唯一
  • 代码示例:
    1.创建测试实体类:
// 测试实体类1:Cat
public class Cat {
    public void cry(){
        System.out.println("miao~");
    }
}
// 测试实体类2:Dog
public class Dog {
    public void cry(){
        System.out.println("wang~");
    }
}
// 测试实体类3:People
public class People {
    private Cat cat;
    private Dog dog;
    private String name;
    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. 创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="cat" class="Cat"></bean>
    <bean id="dog" class="Dog"></bean>
    <bean id="people" class="People" autowire="byName">

注意:Bean的id需为”cat“、”dog“,与set方法对应,否则报错。

  1. 测试
public class MyTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        People people = context.getBean("people", People.class);
        people.getCat().cry();
        people.getDog().cry();
    }
}

二、byTpye实现自动装配

  • 方法:在xml文件中添加 <bean id="xxx" class="xxx" autowire="byType"">
  • 注意:byType会自动在容器上下文查找和自己对象类型相同的bean,也就是相同的class。因此需保证class全局唯一
  • 代码:仅修改了配置文件中的内容。
<bean id="cat1" class="com.ali.Cat"></bean>
<bean id="dog" class="com.ali.Dog"></bean>
<bean id="people" class="com.ali.People" autowire="byType"></bean>

三、注解@Autowired实现自动装配

  • 方法:
  1. 导入约束:
<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
  1. 配置注解的支持:
<context:annotation-config/>
  1. 添加注解
    在需要传入值的属性上方添加注解:
@Autowired
@Qualifier(value = "id")

其中@Autowired能按byName或者byType(我测试结果也可以按byType装配,但是我看的视频讲解是说按byName形式)形式进行自动装配。当不同bean对应同一个类型时,需使用 @Qualifier(value = “id”)指定bean的id名称。

  • 代码示例如下:
// 实体类
public class People {
    @Autowired
    @Qualifier(value = "cat1")
    private Cat cat;
    @Autowired
    private Dog dog;

    private String name;

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "People{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }
}
// .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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>
    <bean id="cat1" class="com.ali.Cat"></bean>
    <bean id="cat12" class="com.ali.Cat"></bean>
    <bean id="dog11" class="com.ali.Dog"></bean>
    <bean id="people" class="com.ali.People"></bean>

</beans>

四、利用Java中的注解@Resource实现自动装配

  • 方法:在需要传入值的属性上方添加注解:
@Resource(name="cat1")

其中@Resource能按byName或者byType形式(我测试结果也可以按byName装配,但是我看的视频讲解是说按byName形式)进行自动装配。当不同bean对应同一个类型时,需使name指定bean的id名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值