spring03

Posted 无人i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring03相关的知识,希望对你有一定的参考价值。


title: spring03
date: 2020-03-09 19:06:11
tags:自动装配(autowired)


本部分是自动装配的内容。

1、概述

摘抄自秦老师

  • 自动装配是使用spring满足bean依赖的一种方法
  • spring会在应用上下文中为某个bean寻找其依赖的bean。

Spring中bean有三种装配机制,分别是:

  1. 在xml中显式配置;
  2. 在java中显式配置;
  3. 隐式的bean发现机制和自动装配。

这里我们主要讲第三种:自动化的装配bean。

Spring的自动装配需要从两个角度来实现,或者说是两个操作:

  1. 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
  2. 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;

2、环境

  • People

    package com.nevesettle.pojo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    
    public class People {
        private String name;
        @Autowired
        @Qualifier("cat321")
        private Cat cat;
        @Autowired
        private Dog dog;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = 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;
        }
    }
  • Cat

    package com.nevesettle.pojo;
    
    public class Cat {
        public void shout(){
            System.out.println("miao..");
        }
    }
  • Dog

    package com.nevesettle.pojo;
    
    public class Dog {
        public void shout(){
            System.out.println("wang..");
        }
    }

2、配置

只需要在xml中注册相应的bean,然后开启自动装配即可。

<?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="cat321" class="com.nevesettle.pojo.Cat"/>
    <bean id="cat323211" class="com.nevesettle.pojo.Cat"/>
    <bean id="dog" class="com.nevesettle.pojo.Dog"/>
    <bean id="people" class="com.nevesettle.pojo.People"/>

</beans>

3、笔记

@Autowired

  • 自动装配
  • 首先校验的是bean的类型, 如果类型存在则匹配,如果存在多个,则校验名称
  • 当名称多个时,可以配合 @Qualifier("xxx")来使用

@Resource

  • java自带的自动装配
  • 先校验的是名称,其次是校验类型, 都不存在时报错,没有@Autowired常用

以上是关于spring03的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects