Spring的自动装配及注解开发(“最易懂得Spring学习”)(一)

简介: 自动装配及注解开发七、Bean的自动装配1. 环境搭建2. ByName自动装配3. ByType自动装配

七、Bean的自动装配


  • 自动装配是Spring满足bean依赖的一种方式


  • spring会在上下文中自动寻找,并自动给bean装配属性


在Spring中有三种装配的方式


  1. 在xml显示的配置【之前用的都是这种方式】
  2. 在java中显示配置
  3. 隐式的自动装配bean【重要】


1. 环境搭建


  • 一个人有两个宠物


Cat

public class Cat {
    public void shout(){
        System.out.println("喵");
    }
}

Dog

public class Dog {
    public void shout(){
        System.out.println("汪");
    }
}

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;
    }
    @Override
    public String toString() {
        return "People{" +
                "cat=" + cat +
                ", dog=" + dog +
                ", name='" + name + '\'' +
                '}';
    }
}

beans.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="cat" class="com.hxl.pojo.Cat"/>
    <bean id="dog" class="com.hxl.pojo.Dog"/>
    <bean id="people" class="com.hxl.pojo.People">
        <property name="name" value="王木木"/>
        <property name="cat" ref="cat"/>
        <property name="dog" ref="dog"/>
    </bean>
</beans>

MyTest

import com.hxl.pojo.People;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
    @Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        People people = (People) context.getBean("people",People.class);
        people.getDog().shout();
        people.getCat().shout();
    }
}


我们发现上面有好多代码是重复的,那如何解决呢?


2. ByName自动装配


和自己对象set方法后面的值对应

<bean id="cat" class="com.hxl.pojo.Cat"/>
<bean id="dog" class="com.hxl.pojo.Dog"/>
<!--
    byName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
-->
<bean id="people" class="com.hxl.pojo.People" autowire="byName">
    <property name="name" value="王木木"/>
</bean>

如果id不一样就会报错,比如id=“dog1”


微信图片_20211230152241.png


3. ByType自动装配


要保证类型全局唯一。

<bean id="dog111" class="com.hxl.pojo.Dog"/>
<!--
    byType:会自动在容器上下文中查找,和自己对象属性相同的bean
-->
<bean id="people" class="com.hxl.pojo.People" autowire="byType">
    <property name="name" value="王木木"/>
</bean>


此时也可以运行。但是如果有两个同样的类型Dog就会报错。

相关文章
|
23天前
|
监控 Java 调度
Spring中的任务调度:探索@Scheduled和@Schedules注解的威力
Spring中的任务调度:探索@Scheduled和@Schedules注解的威力
26 0
|
26天前
|
Java Spring 容器
Spring5源码(42)-@Transactional注解的声明式事物事物标签提取
Spring5源码(42)-@Transactional注解的声明式事物事物标签提取
24 0
|
29天前
|
XML Java 数据格式
Spring注解开发
Spring注解开发是指使用注解来配置和管理Spring框架中的各种组件和功能。通过使用注解,我们可以在代码中直接声明和配置Spring的bean、依赖注入、AOP切面等,并且减少了传统XML配置文件的使用。
21 0
|
23天前
|
缓存 Java 数据库
优化您的Spring应用程序:缓存注解的精要指南
优化您的Spring应用程序:缓存注解的精要指南
25 0
|
5天前
|
Java Maven 开发者
深入剖析Spring Boot在Java Web开发中的优势与应用
深入剖析Spring Boot在Java Web开发中的优势与应用
|
5天前
|
Java API 开发者
Spring框架在Java Web开发中的最佳实践
Spring框架在Java Web开发中的最佳实践
|
5天前
|
存储 Java 程序员
【JavaEE进阶】 Spring使用注解存储对象
【JavaEE进阶】 Spring使用注解存储对象
|
7天前
|
Java Spring
Spring 使用注解注入失败,调用内容时提示空指针
Spring 使用注解注入失败,调用内容时提示空指针
9 0
|
10天前
|
开发框架 Java 测试技术
Spring Boot 项目中使用 `@Autowired` 注解,合理吗?
Spring Boot 项目中使用 `@Autowired` 注解,合理吗?
95 1
Spring Boot 项目中使用 `@Autowired` 注解,合理吗?
|
23天前
|
监控 安全 Java
Spring注解之恋:@Async和@Transactional的双重奏
Spring注解之恋:@Async和@Transactional的双重奏
24 0

相关产品

  • 云迁移中心