基于CSS3的3D立方体旋转动画

简单总结@Autowired和@Resource区别

@Autowired

创建Cat类和Dog类的代码省略

public class Person {
    public String name;

    @Autowired
    public Dog dog;
    @Autowired
    public Cat cat;

    public String getName() {
        return name;
    }

    public Dog getDog() {
        return dog;
    }

    public Cat getCat() {
        return cat;
    }

}
<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

<!--    注解配置-->
    <context:annotation-config/>


    <bean id="dog" class="com.jiehao.pojo.Dog"/>

    <bean id="cat" class="com.jiehao.pojo.Cat"/>

    <bean id="person" class="com.jiehao.pojo.Person"/>


</beans>

使用了@Autowired可以不用写set方法,前提是这个自动装配的属性在IOC(Spring)容器中存在,且符合byname条件

@Qualifier

public class Person {

    @Nullable
    public String name;

    @Autowired
    @Qualifier(value = "dog1")
    public Dog dog;
    @Autowired
    @Qualifier(value = "cat1")
    public Cat cat;

    public String getName() {
        return name;
    }

    public Dog getDog() {
        return dog;
    }

    public Cat getCat() {
        return cat;
    }

}
<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

<!--    注解配置-->
    <context:annotation-config/>


    <bean id="dog1" class="com.jiehao.pojo.Dog"/>
    <bean id="dog" class="com.jiehao.pojo.Dog"/>
    <bean id="cat1" class="com.jiehao.pojo.Cat"/>
    <bean id="cat" class="com.jiehao.pojo.Cat"/>
    <bean id="person" class="com.jiehao.pojo.Person"/>


</beans>

@Autowired首先会按照类型查找,当多个想同类型时会使用 @Qualifier指定id查找

@Resource

使用前需要添加依赖,导包

<dependency>
   	<groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
public class Person {


    public String name;

    //如果没有指定name = "dog2",就会直接匹配dog
    @Resource(name = "dog2")
    public Dog dog;

    @Resource(name = "cat2")
    public Cat cat;

    public String getName() {
        return name;
    }

    public Dog getDog() {
        return dog;
    }

    public Cat getCat() {
        return cat;
    }

}
<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

<!--    注解配置-->
    <context:annotation-config/>


    <bean id="dog" class="com.jiehao.pojo.Dog"/>
    <bean id="dog2" class="com.jiehao.pojo.Dog"/>
    <bean id="cat" class="com.jiehao.pojo.Cat"/>
    <bean id="cat2" class="com.jiehao.pojo.Cat"/>
    <bean id="person" class="com.jiehao.pojo.Person"/>
</beans>

小结;

相同点:

都是用来自动装配,都可放在属性上

不同点:

@Autowired

  1. spring默认按类型注入 (如果要使用名称装配,配合@Qualifier注解)

  2. 如果存在且唯一,就完事。

    注意:依赖对象必须存在,如果要允许null值,可以设置它的required属性为false @Autowired(required=false);

  3. 如果存在但不唯一,寻找name为的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了

@Resource

  1. 默认按名称进行注入,通过name属性指定对应bean的Id或者name
  2. 如果找不到名称,就通过类型查找
  3. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
posted @ 2021-02-02 20:46  只会写error  阅读(154)  评论(0)    收藏  举报