ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Autowired和Resource详解

2022-06-28 09:33:47  阅读:167  来源: 互联网

标签:Resource name Autowired cat bean 详解 public


Autowired和Resource详解

概述

本文主要讲述注解注入bean的方式,主要讲解@Autowired和@Resource注解
一如既往推荐狂神的视频,看了这么多视频,到今天终于理解了什么是bean...

实践一下

其实本文就是讲怎么把xml中autowired给换成注解方式进行注入
还是那个背景:一人一猫一狗
猫类

package com.kuangstudy;

/**
 * 功能描述
 *
 * @since 2022-06-26
 */
public class Cat {
    public void shout() {
        System.out.println("miao~");
    }
}

狗类

package com.kuangstudy;

/**
 * 功能描述
 *
 * @since 2022-06-26
 */
public class Dog {
    public void shout() {
        System.out.println("wang~");
    }
}

人类

package com.kuangstudy;

import javax.annotation.Resource;

/**
 * 功能描述
 *
 * @since 2022-06-26
 */
public class Person {
    private String name;
    //    @Autowired(required = false)
//    @Qualifier("cat2")
    @Resource(name = "cat1")
    private Cat cat;

    //    @Autowired
//    @Qualifier("dog1")
    @Resource(name = "dog1")
    private Dog dog;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = 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;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", cat=" + cat +
                ", dog=" + dog +
                '}';
    }
}

测试类

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.kuangstudy.Person;

/**
 * 功能描述
 *
 * @since 2022-06-26
 */
public class Test02 {
    @Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        Person person = applicationContext.getBean("xiaohong", Person.class);
        person.getCat().shout();
        person.getDog().shout();
    }
}

配置文件

<?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="cat2" class="com.kuangstudy.Cat"></bean>
    <bean id="dog2" class="com.kuangstudy.Dog"></bean>
    <bean id="dog1" class="com.kuangstudy.Dog"></bean>
    <bean id="cat1" class="com.kuangstudy.Cat"></bean>
    <bean id="xiaohong" class="com.kuangstudy.Person"></bean>
</beans>

重点及总结
配置文件中注意事项

  1. 添加上下文配置空间及约束
    <beans xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/context
    https://www.springframework.org/schema/context/spring-context.xsd">
    
  2. 添加上下文注解配置,可以被注解解析
    <context:annotation-config />
    

@Autowired和@Resource的区别
这块建议一定要去练习

  1. 两者都是导入bean的注解,都可以用在属性或者方法上实现bean的自动装配,一般用在属性上
  2. @Autowired是Spring的注解 @Resource是java的注解
  3. 两者都能通过ByName和ByType两种方式实现自动装配 @Autowired默认使用ByType方式,@Resource默认使用ByName方式
  4. 两者功能相似,相较来说@Resource功能会更加强大,@Autowired性能可能更好一些(狂神说的,我这边没有依据)
  5. 在bean类型有多个实例且不能通过ByName方式装配注入的时候,@AutoWired搭配@Qualifier("")一起指定注入的bean @Resource(name="")来实现
  6. @Autowired(required = false) 支持某个bean为空不导入(在cat属性上添加该字段,beans.xml中把Cat对象全部注释掉,测试的时候把person.getCat().shout();注释掉,可以看到也可以运行成功)

标签:Resource,name,Autowired,cat,bean,详解,public
来源: https://www.cnblogs.com/Oh-mydream/p/16418325.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有