spring 容器的自动装配

spring自动装配

自动装配是根据容器的上下文去寻找,不需要人为的去自动装配,例如ref元素,自动转配可以减少指定属性和构造函数参数的需要,并且随着对象的发展不断更新配置,例如,如果您需要向类添加依赖项,则无需修改配置即可自动满足该依赖项。因此,自动装配在开发过程中特别有用,当代码库变得更稳定时,不会否定切换到显式装配的选项。

自动装配使用autowire元素实现自动注入bean,自动装配模式介绍三种,每个bean都可以指定自动装配,但要分清需要装配的依赖。

模式说明
no默认值,没有自动装配,需要通过ref引用bean,对于较大的部署,希望使用这种模式,清晰明白,结构可以更好的控制
byName按属性名称自动装配,会去查找需要自动装配属性同名的bean,且属性名在容器中不重复,否则会报错,可以不存在,但不会报错
byType如果容器中存在一个属性类型的bean,也就是class元素,则会自动装配,如果存在多个,则会报错,如果没有匹配的bean,也不会报错

创建三个类,以下案例都是借助这三个类

Address类

public class Address {
    private  String name;

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Address{" +
                "name='" + name + '\'' +
                '}';
    }
}

Game类

public class Game {
    private  String name;

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Game{" +
                "name='" + name + '\'' +
                '}';
    }
}

User类

public class User {
    private  String name;
    private  Game game;
    private  Address address;

    public String getName() {
        return name;
    }

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

    public Game getGame() {
        return game;
    }

    public void setGame(Game game) {
        this.game = game;
    }


    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", game=" + game +
                ", address=" + address +
                '}';
    }
}

byName自动装配

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"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

     <bean class="com.yc.ch.Address" id="address" p:name="游泳"/>
    <bean class="com.yc.ch.Game" id="game" p:name="计算机"/>
    <bean class="com.yc.ch.User" id="user" p:name="Tom" autowire="byName"/>
</beans>

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"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

        <bean class="com.yc.ch.Address" id="address" p:name="游泳"/>
        <bean class="com.yc.ch.Game" id="game" p:name="计算机"/>
        <bean class="com.yc.ch.User" id="user" p:name="Tom" autowire="byType"/>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值