【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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不易撞的网名

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

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

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

打赏作者

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

抵扣说明:

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

余额充值