Spring系列(五)Spring使用注解进行装配

导读:本篇文章讲解 Spring系列(五)Spring使用注解进行装配,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com


扩展:Spring系列学习汇总


使用注解实现自动装配

  • 上一篇文章我们讲解了Spring自动装配的几种方式,其实在实际开发中,我们用的最多的是使用注解来实现装配。
一、@Autowired

①这里首先说明一个点,尽量不要使用idea自动创建的beans头文件引入,需要补全,不然会报错:
在这里插入图片描述
②补充引入文件头:

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

③xml:开启属性注解支持

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

    <bean id="car" class="entity.Car"/>
    <bean id="house" class="entity.House"/>
    <bean id="person" class="entity.Person"/>

④实体类:

public class Person {
    @Autowired
    private Car car;
    @Autowired
    private House house;

    private String name;
    private int age;
    private String like;

    public Car getCar() {
        return car;
    }

    public House getHouse() {
        return house;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getLike() {
        return like;
    }
}
public class Car {
    public void getName(){
        System.out.println("我是一辆车!");
    }
}
public class House {
    public void getName(){
        System.out.println("我是一栋房子!");
    }
}

⑤测试类:

public class TestAnonatation {
    public static void main(String[] args) {
        ApplicationContext Context = new ClassPathXmlApplicationContext("ContextAplication.xml");
        Person person = Context.getBean("person",Person.class);

        person.getCar().getName();
        person.getHouse().getName();
    }
}

⑥执行结果:
在这里插入图片描述
⑦总结:

  • 使用了@Autowired之后,可以省略Person类中的set方法,简化了代码量
  • @Autowired(required = false) 默认是true,对象不允许为null,false表示对象可以为null
  • @Autowired 其实就相当于byType自动装配,是根据类型来自动装配的
二、@Qualifier
  • @Qualifier是组合注解,不可以单独使用
  • 配合@Autowired来指定byName()装配
	@Autowired
    @Qualifier(value = "car")
    private Car car;
    @Autowired
    @Qualifier(value = "house")
    private House house;
  • 注意这个,可以直接点到xml的指定位置上去!
    在这里插入图片描述
  • 执行结果:
    在这里插入图片描述
三、@Resource

①xml:

	@Resource(name = "car")
    private Car car;
    @Resource
    private House house;

②执行结果:
在这里插入图片描述

③总结:

  • 指定name时,以byName为准,同时,xml中id不能为空!
  • 不指定时,默认以byName为准,不成功以byType为准!
  • 都失败报错!
四、@Autowired与@Resource异同

@Autowired与@Resource异同:

  • @Autowired与@Resource都可以用来装配bean。都可以写在字段上,或写在setter方法上。

  • @Autowired默认按类型装配(属于spring规范),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用

  • @Resource(属于J2EE复返),默认按照名称进行装配,名称可以通过name属性进行指定。如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

  • 它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired先byType,@Resource先byName


路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧**转载请注明出处哦**

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/17095.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!