Spring:自动装配bean学习笔记

Spring:自动装配bean学习笔记

bean的自动装配

当实体类属性需要依赖特别多的其他类时,bean的自动装配可以帮我们减少xml中许多的配置。

package com.huang.pojo;

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.不使用bean自动装配中xml的配置:

    <bean id="cat" class="com.huang.pojo.Cat"/>
    <bean id="dog" class="com.huang.pojo.Dog"/>

    <bean id="people" class="com.huang.pojo.People">
        <property name="name" value="姓名"/>
        <property name="dog" ref="dog"/>
        <property name="cat" ref="cat"/>
    </bean>

因为这个例子中我们实体类需要依赖的其他类比较少,所以配置bean的property属性是觉得也不是很繁琐,但是一旦我们需要依赖的其他类多了起来,property属性的配置也就会越来越多,很麻烦。
2.使用bean自动装配(通过byName):

    <bean id="cat" class="com.huang.pojo.Cat"/>
    <bean id="dog" class="com.huang.pojo.Dog"/>

    <bean id="people" class="com.huang.pojo.People" autowire="byName">
        <property name="name" value="姓名"/>
    </bean>

通过设置bean的属性autowire="byName"后,自动装配便会在容器的上下文中查找和自己对象属性名字相同的id的bean并配置。
3.使用bean自动装配(通过byType):

    <bean id="cat" class="com.huang.pojo.Cat"/>
    <bean id="dog" class="com.huang.pojo.Dog"/>

    <bean id="people" class="com.huang.pojo.People" autowire="byType">
        <property name="name" value="姓名"/>
    </bean>

通过设置bean的属性autowire="byType"后,自动装配便会在容器的上下文中查找和自己对象属性类型相同的bean,但是容器上下文中只能有一个该类型的bean。

使用注解实现自动装配

1.使用注解实现自动装配必须先在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
        https://www.springframework.org/schema/context/spring-context.xsd">

2.在xml中设置开启注解支持:

    <!--开启注解支持-->
    <context:annotation-config/>

3.注册相关bean:

    <bean id="dog" class="com.huang.pojo.Dog"/>
    <bean id="cat" class="com.huang.pojo.Cat"/>
    <bean id="people" class="com.huang.pojo.People"/>

4.使用注解:

    @Autowired
    private Cat cat;

    @Autowired
    @Qualifier(value = "dog") 
    private Dog dog;
    private String name;
  • @Autowired会先通过byType的方式在你容器上下文中寻找bean,如果你容器上下文中有多个注释下对象类型的bean,再通过byName的方式寻找对应的bean。
  • 在@Autowired下可以再用@Qualifier(value = )注释,指定装配一个id为value的bean。
  • 通过@Autowired(required = false)可以设置required ,required默认为true,默认情况下它要求依赖对象必须存在。设置required 为false之后 ,可以允许你在容器上下文中不定义注释属性类型的bean。

@Resource与@Autowired的不同

  • @Resource有两个属性name和type,可以通过属性值指定寻找容器上下文的bean
  • @Resource两个属性都没有指定的情况下,先通过byName的方式进行装配,如果找不到对应的bean,再通过byType方式去寻找。

注:@Resource与@Autowired注解都可注解在属性的set方法上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值