这篇文章笔者和大家聊一聊自动装配,首先我们学习它的时候我们应该知道何为自动装配?

举个例子:一个人他有一只狗和一只猫,他有的 这两个动物就相当于这个人的名字一样,写在一个personn类中并且生成无参,有参,get和set对吧?在传统的创建这个人类的对象中,我们得先new一个人,再创建这两个动物;然而在Spring中,我们只需在XML文件中创建Person的对象,因为Person类中有了这两个动物,所以我们要得到这两个动物对象只需要自动装配上去,可以通过byName,也可以通过byType来实现自动装配,现在笔者将上述所对应的代码给大家,大家就能理解了自动装配。

Person类

package com.kaifamiao.ioc.relation;import com.kaifamiao.ioc.Logable;/*** @author 后来的老李* @version 1.0*/
public class Person implements Logable {private Cat cat;private Dog dog;private String name;public Person() {super();logger.info("Person的无参构造");}public void have(){logger.info("have方法被执行");System.out.println("嗨,大家好!我是"+name+"我有一条狗叫"+dog.getName()+"和一只猫叫"+cat.getName());}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;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

Dog类:

package com.kaifamiao.ioc.relation;import com.kaifamiao.ioc.Logable;/*** @author 后来的老李* @version 1.0*/
public class Dog implements Logable {private String name;public Dog() {super();logger.info("Dog的构造");}public Dog(String name) {logger.info("Dog的有参构造");this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

Cat类:

package com.kaifamiao.ioc.relation;import com.kaifamiao.ioc.Logable;/*** @author 后来的老李* @version 1.0*/
public class Cat implements Logable {private String name;public Cat() {super();logger.info("Cat的构造");}public Cat(String name) {logger.info("Cat的有参构造");this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

现在是XML文件,笔者希望大家将XML文件看懂,就能理解到自动装配了,注意autowire后的取值

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="dog" class="com.kaifamiao.ioc.relation.Dog"/><bean id="cat" class="com.kaifamiao.ioc.relation.Cat"/><!--byType实现自动装配--><bean id="person" class="com.kaifamiao.ioc.relation.Person" autowire="byType"><property name="name" value="李星云"/></bean><!--byName实现自动装配--><bean id="person2" class="com.kaifamiao.ioc.relation.Person" autowire="byName"><property name="name" value="李茂贞"/></bean>
</beans>

接下来是测试类,笔者将其封装,写了两个测试类,第一个是byType,第二个是byName

package com.kaifamiao.ioc.relation;import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @author 后来的老李* @version 1.0*/
public class AnimalTest {private static String configs="classpath*:com/**/relation/animal.xml";private static AbstractApplicationContext context;public @BeforeClass static void setUp(){context = new ClassPathXmlApplicationContext(configs);}//byType实现自动装配public @Test void test1(){Person person = context.getBean("person", Person.class);String p = person.getName();System.out.println(p);Dog dog = context.getBean("dog", Dog.class);dog.setName("哮天犬");String g = dog.getName();System.out.println(g);Cat cat = context.getBean("cat", Cat.class);cat.setName("九灵元圣");String t = cat.getName();System.out.println(t);person.have();}//byName实现自动装配public @Test void test2(){Person person2 = context.getBean("person2", Person.class);String n = person2.getName();System.out.println(n);Dog dog = context.getBean("dog", Dog.class);dog.setName("地狱三头犬");String n2 = dog.getName();System.out.println(n2);Cat cat = context.getBean("cat", Cat.class);cat.setName("假老练");String n3 = cat.getName();System.out.println(n3);person2.have();}public @AfterClass static void tearDown(){context.close();}}

运行结果:

好,现在代码走通了,我们重点回头来看看XML文件;

    <bean id="dog" class="com.kaifamiao.ioc.relation.Dog"/><bean id="cat" class="com.kaifamiao.ioc.relation.Cat"/><!--byType实现自动装配--><bean id="person" class="com.kaifamiao.ioc.relation.Person" autowire="byType"><property name="name" value="李星云"/></bean><!--byName实现自动装配--><bean id="person2" class="com.kaifamiao.ioc.relation.Person" autowire="byName"><property name="name" value="李茂贞"/></bean>

我们通过观察XML文件再对比测试类,为什么我们只告诉了IOC容器我们需要创建Person的对象李星云,但是并有告诉容器我们需要哮天犬和九灵元圣(这里的告诉相当于<bean>...</bean>)

byType:

那么哮天犬和九灵元圣哪里来的呢?这就是笔者要将的自动装配,第一个例子是通过byType实现自动装配的,IOC容器先创建了对象李星云,再识别到了byType,知道了要自动装配了,通过class给出的路径找到Persson类,Person类里面给了两句private Cat cat;和private Dog dog;因此IOC容器又可以创建这两个类对应的对象。这就是通过byType实现的自动转配。


byName:

那么第二个地狱三头犬和假老练哪里来的呢?是IOC在创建了Person2对应的对象,又识别到了byName,知道了要自动装配了,通过class给出的路径找到Persson类,在Person类里面找到了setDog和setCat,就知道要创建Dog和Cat了,因此IOC容器创建这两个类对应的对象。这就是通过byName实现的自动转配。

Java(Spring)学习笔记--->自动装配(autowire)相关推荐

  1. Spring学习笔记--自动装配Bean属性

    Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType – 把与Bean的属性具有相同类型 ...

  2. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...

    详解Java的Spring框架下bean的自动装载方式 Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的和元素. 自 ...

  3. Spring自动装配-autowire

    目录 1.自动装配-autowire 2.autowire的四种模式 3.使用自动装配 3.1 使用byName自动装配 3.2 使用byType自动装配 资源类和配置文件 1.自动装配-autowi ...

  4. Spring自动装配 autowire

    什么是自动装配? 自动装配就是让应用程序上下文为你找出依赖项的过程.说的通俗一点,就是Spring会在上下文中自动查找,并自动给bean装配与其关联的属性! spring中实现自动装配的方式有两种,一 ...

  5. JavaEE——Spring学习笔记01【Ioc开发的模式】

    JavaEE--Spring学习笔记01[Ioc开发的模式] JavaEE--Spring学习笔记02[Spring和Mybatis的整合] JavaEE--Spring学习笔记03[AOP开发] J ...

  6. Spring精华问答 | Spring Bean的自动装配是怎么回事?

    戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...

  7. 尚学堂JAVA高级学习笔记_1/2

    尚学堂JAVA高级学习笔记 文章目录 尚学堂JAVA高级学习笔记 写在前面 第1章 手写webserver 1. 灵魂反射 2. 高效解析xml 3. 解析webxml 4. 反射webxml 5. ...

  8. CHY的Spring学习笔记---师从动力节点王鹤老师(B站白嫖)

    Spring学习笔记 核心技术:ioc和aop ioc:使用di(依赖注入)实现控制反转,底层使用的是反射机制 spring可以创建自己写的类的对象,也可以创建非自定义对象,只要知道类的全限定名即可. ...

  9. Spring抛出异常_自动装配

    Spring自动装配(autowire)出错 报错如下: org.springframework.beans.factory.UnsatisfiedDependencyException: Error ...

  10. Spring Boot(一) 自动装配--约定大于配置

    欢迎去我的个人博客--晓坞坐坐,里面有很多有趣的文章,不止是技术.www.lixiaodongisme.com 随着spring体系的发展,我们在开发时需要配置整合的东西也越来越多,在进行开发时,繁琐 ...

最新文章

  1. 如何挽回一个快要“变心”的买家?
  2. VSCode插件开发全攻略(六)开发调试技巧
  3. C语言每日一题之No.9
  4. vue属性_computed(计算属性)methods(方法)
  5. 图像处理软件Acorn for Mac如何创建新图像?
  6. 解决 No utmpx entry. You must exec login from the lowest level shell.
  7. 数据库服务器信息填写,数据库服务器是怎么填写
  8. python 批量word文档转pdf
  9. 从Visual SourceSafe (VSS)服务器下载文件(C#)
  10. poEdit制作WordPress主题汉化,插件汉化攻略
  11. 在美团,我从暑期实习到转正
  12. ramda 函数 Function
  13. 脚本 金盾替换机器码_金盾2018SS加密视频机器码替换工具的分析过程三
  14. 中小企业成本的会计核算方法
  15. 计算机管理无法定位程序输入点,win10系统打开程序提示无法定位程序输入点于动态链接库怎么办...
  16. A卡核显N卡独显笔记本Deepin20环境下配置双显卡驱动和CUDA
  17. GCC源码分析(摘)
  18. 5个超棒的自我提升App
  19. 多级表头 el-table-column的使用
  20. layui数据表格的字体颜色

热门文章

  1. 小学计算机室管理使用制度,微机室管理制度
  2. Ubuntu修改grub进入Memtest86内存测试模式的退出解决方法
  3. 大智慧L2数据接口怎样进行二次开发?
  4. Build tool简介
  5. codeforces D.The Bakery
  6. 对抗手机恶意软件的十点建议
  7. badboy录制乱码,badboy 录制脚本
  8. 银行数字化转型导师坚鹏:数字化思维创新与金融业转型升级
  9. Google hack常用搜索语法
  10. configure: error: readline library not found 解决方法