【Spring第五篇】Autowired:自动装配

Autowired:自动装配


要使用注解,首先必须开启注解支持,再beans.xml中添加以下字段

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

编写三个实体类

Cat

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

Dog

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

People

package com.kk.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

@Data
@AllArgsConstructor
@NoArgsConstructor
@SuppressWarnings("all")
public class People {

    //@Resource也可以
    /**
     *  @Autowired 通过byName方式实现,必须要求这个对象存在
     *  @Resource 默认通过byName方式实现,如果找不到名字,则通过byType方式实现
     *  @Qualifier 给这个注入的类指定特定的名称
     *  执行顺序不同
     */

    @Autowired
    @Qualifier(value = "cat111")
    private Cat cat;


    @Autowired
    @Qualifier(value = "dog")
    private Dog dog;

    private String 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"

       xmlns:context="http://www.springframework.org/schema/context"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

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



    <bean id="cat111" class="com.kk.pojo.Cat"/>
    <bean id="dog" class="com.kk.pojo.Dog"/>


<!--    autowire  自动装配
        byName :会自动在容器上下文中查找和自己对象set方法后面的值 对应的beanid
        byType:会自动在容器上下文中查找和自己对象属性类型(class)(com.kk.pojo.Cat)相同的bean 必须保证类型全局唯一
-->
<!--    <bean id="people" class="com.kk.pojo.People" autowire="byType">-->
<!--        <property name="name" value="赵六"/>-->
<!--        <property name="dog" ref="dog"/>-->
<!--        <property name="cat" ref="cat111"/>-->
<!--    </bean>-->




        <bean id="people" class="com.kk.pojo.People">
<!--            给People类中的属性name赋值 qx-->
            <property name="name" value="qx"/>
        </bean>



</beans>

测试:

public class Test {
    @org.junit.Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        People people = context.getBean("people", People.class);
        System.out.println(people.getName());
        people.getDog().shout();
        people.getCat().shout();
    }
}

当我们没有使用@Autowired注解的时候,我们使用传统的方法

<bean id="cat111" class="com.kk.pojo.Cat"/>
<bean id="dog" class="com.kk.pojo.Dog"/>


<bean id="people" class="com.kk.pojo.People" autowire="byType">
    <property name="name" value="赵六"/>
    <property name="dog" ref="dog"/>
    <property name="cat" ref="cat111"/>
</bean>

autowire里边的参数有两个选项:
byName :会自动在容器上下文中查找和自己对象set方法后面的值,即对应的bean中的id
byType :会自动在容器上下文中查找和自己对象属性类型(class)(com.kk.pojo.Cat)相同的bean 必须保证类型全局唯一


当我们使用@Autowired注解

我们需要在people类中加上以下注解,其中@Qualifier是标注这个类在spring容器中的名字,需要一一对应

@Autowired
@Qualifier(value = "cat111")
private Cat cat;
@Autowired
@Qualifier(value = "dog")
private Dog dog;
<!--    开启注解的支持-->
      <context:annotation-config/>

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

总结:Autowired的作用是什么?

Autowired自动装配:在People实体类中,如果我们想要调用Cat以及Dog的方法,只需将他们的类编写进来,然后在方法上加上@Autowired注解,并且在beans.xml中将它们注入到spring容器中,交给spring托管,这时我们就可以使用实体类People去调用Cat和Dog里边的方法。

相当于我们在实体类中编写实体类的方法并且使用set

@Qualifier:给bean声明一个特有的名字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-03R6dkWX-1649573352068)(C:\Users\30666\AppData\Roaming\Typora\typora-user-images\image-20220310150119316.png)]

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不易撞的网名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值