• Spring——自动装配的三种实现方式


    依赖注入的本质是装配,装配是依赖注入的具体行为

    1.测试环境搭建
    public class Cat {
        public void bark(){
        	System.out.println("miao...");
        }
    }
    
    public class Dog {
        public void bark(){
        	System.out.println("wang...");
        }
    }
    
    public class People {
        Cat cat;
        Dog dog;
    
        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;
        }
    }
    
    2.byName:会自动在容器上下文中,通过set方法中的参数名去查找相同id的<bean>
    <bean id="dog" class="com.guan.bean.Dog"></bean>
    <bean id="cat" class="com.guan.bean.Cat"></bean>
    
    <bean id="people" class="com.guan.bean.People" autowire="byName"></bean>
    
    3.byType:会自动在容器上下文中,通过自己对象属性类型相同的bean
    <bean id="dog" class="com.guan.bean.Dog"></bean>
    <bean id="cat" class="com.guan.bean.Cat"></bean>
    
    <bean id="people" class="com.guan.bean.People" autowire="byType"></bean>
    

    注意

    • byName需要保证<bean>的id唯一
    • byType需要保证<bean>的type唯一
    4.使用注解实现自动装配

    使用:

    1. 导入约束

    2. 配置注解的支持

      <?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/>
      
      </beans>
      

    常用注解:

    1. @Autowired:需要配置spring,直接在属性上使用.先使用byType,再使用byName?

      required(default true):默认不需Null

      public class People {
          @Autowired
          Cat cat;
          @Autowired
          Dog dog;
      }
      

      @Qualifier:当属性名和容器中<bean>中的id不同时,可以通过该注解为属性"起别名"

      public class People {
          @Autowired
          @Qualifier("cat12")
          Cat cat;
          @Autowired
          Dog dog;
      }
      
    2. @Resource:jdk注解

      name:用于起别名

    区别:

    1. 实现方式:

      (1).@Autoword先通过byType实现,如果有重复再通过byName,而且默认要求对象存在

      表现:同一个类型,不同名称,<bean id="dog123" class="com.guan.bean.Dog"></bean>,可以匹配;同一个名称,类型不匹配时,<bean id="dog" class="com.guan.bean.Cat"></bean>,如果只要一个对应的类型可以自动匹配,如果有多个对应的类型会报错

      (2).@Resource默认通过byName实现,如果找不到name,才通过byType,否则报错

      表现:如果有一个同名的不同类型<bean id="cat" class="com.guan.bean.Dog"></bean>,会直接报错对应的类型不匹配;如果有一个同类型的,但是不同名的,可以匹配;如果有多个同类型且不同名,无法匹配

    总结:实际上xml文件中一般存放的核心配置文件,一般的配置可以用其它方式

  • 相关阅读:
    数据分析项目补充:医院药品销售数据分析
    会计实务会计分录——资产之流动资产篇
    HTTP请求过程和状态响应码
    网络爬虫深究-初识HTTP和https常识
    数字分析之一元线性回归及多元线性回归
    Navicat15激活(仅供学习使用,严禁任何商业用途)
    pandas补充(其二)与matplotlib补充
    pandas模块补充
    阿里云ecs服务器公网ip除了能telnet通22端口,其他如tomcat的8080端口telnet不通,原来需要添加安全组规则
    maven依赖里redis的依赖spring-boot-starter-data-redis和spring-boot-starter-redis有什么区别?
  • 原文地址:https://www.cnblogs.com/Arno-vc/p/13393352.html
Copyright © 2020-2023  润新知