Bean的自动装配

Bean的自动装配,第1张

概述Bean的自动装配 1. 简介 自动装配是Spring满足Bean依赖的一种方式! Spring会在上下文中自动寻找, 并自动给Bean装配属性! 在Spring中有三种装配的方式 在xml中显式的配 Bean的自动装配

目录Bean的自动装配1. 简介2. 测试1. 环境搭建2. ByName与ByType自动装配3. 小结4. 使用注解实现自动装配1. 导入约束2. 配置注解的支持3. @Autowired3. @Resource注解4. 小结

1. 简介

自动装配是Spring满足Bean依赖的一种方式!

Spring会在上下文中自动寻找,并自动给Bean装配属性!

在Spring中有三种装配的方式

在xml中显式的配置

在java中显式的装配

隐式的自动装配Bean [重要]

2. 测试1. 环境搭建

一个人有两个宠物

package com.wang.pojo;public class Cat {    public voID shout() {        System.out.println("miao ~");    }}
package com.wang.pojo;public class Dog {    public voID shout() {        System.out.println("wang ~");    }}
package com.wang.pojo;public class People {    private String name;    private Cat cat;    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;    }    @OverrIDe    public String toString() {        return "People{" +                "name='" + name + '\'' +                ",cat=" + cat +                ",dog=" + dog +                '}';    }}
<?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" />    <bean ID="dog" />    <bean ID="people" >        <property name="name" value="wang sky"/>        <property name="dog" ref="dog"/>        <property name="cat" ref="cat"/>    </bean></beans>
2. Byname与ByType自动装配
<?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" />    <bean ID="dog" />    <!--    byname: 会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanID    byType: 会自动在容器上下文中查找,和自己对象属性类型相同的bean    -->    <bean ID="people"  autowire="byType">        <property name="name" value="wang sky"/>    </bean></beans>
3. 小结byname的时候,需要保证所有的bean的ID唯一,并且这个bean需要和自动注入的属性的名称一致byType的时候,需要保证所有的bean的class唯一,并且这个bean需要和自动注入的属性的类型一致4. 使用注解实现自动装配

要使用注解须知:

1. 导入约束
xmlns:context="http://www.springframework.org/schema/context"http://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"
2. 配置注解的支持
<context:annotation-config/>
3. @autowired

直接在属性上使用即可!

也可以在setter方式上使用!

使用autowired我们可以不用编写Setter方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且符合类型byType!

@Nullable标记的属性,说明这个属性可以为null(可以不给传参数)

@autowired(required = false) : 如果显式的定义了autowired的required属性为false,说明这个对象可以为null,否则不允许为空

如果@autowired自动装配的环境比较复杂,无法通过一个@autowired注解实现自动装配的时候,我们可以使用@QualifIEr(value = "xxx")去配置(value为ID的值)@autowired的使用,指定唯一的bean对象注入!

package com.wang.pojo;import org.springframework.beans.factory.annotation.autowired;import org.springframework.beans.factory.annotation.QualifIEr;public class People {    private String name;    @autowired    private Cat cat;    @autowired    @QualifIEr(value = "dog222")    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;    }    @OverrIDe    public String toString() {        return "People{" +                "name='" + name + '\'' +                ",dog=" + dog +                '}';    }}
3. @Resource注解

属于javax.annotation包,与自动装配类似

jdk1.8以上是不支持@Resource注解的

解决方法:

在使用Spring注解开发中,使用@Resource报空指针异常时有两个解决方案:

使用jdk8

在Maven中导入如下依赖

<dependency>        <groupID>javax.annotation</groupID>        <artifactID>javax.annotation-API</artifactID>        <version>1.2</version></dependency>
4. 小结

@Resource与@autowired的区别

@autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。@autowired 通过byType的方式实现

@autowired默认按类型装配(这个注解是属于Spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required

属性为false,如:@autowired(required=false) ,如果我们想使用名称装配可以结合@QualifIEr注解进行使用

@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上

时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但

是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。(先byname 再byType)

总结

以上是内存溢出为你收集整理的Bean的自动装配全部内容,希望文章能够帮你解决Bean的自动装配所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230322.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存