自动装配

搭建环境

首先,搭建环境

Cat.java

package com.zhang.bean;/*** @title: Cat* @Author 张宜强* @Date: 2021/7/22 11:42* @Effect:*/
public class Cat {public void shout() {System.out.println("miaomiao");}
}

Dog.java

package com.zhang.bean;/*** @title: Dog* @Author 张宜强* @Date: 2021/7/22 11:41* @Effect:*/
public class Dog {public void shout() {System.out.println("wangwang");}
}

People.java

package com.zhang.bean;/*** @title: People* @Author 张宜强* @Date: 2021/7/22 11:45* @Effect:*/
public class People {private Dog dog;private Cat cat;public Dog getDog() {return dog;}public Cat getCat() {return cat;}public void setDog(Dog dog) {this.dog = dog;}public void setCat(Cat cat) {this.cat = cat;}
}

我们先手动配置

<bean id="dog" class="com.zhang.bean.Dog"/>
<bean id="cat" class="com.zhang.bean.Cat"/><bean id="people" class="com.zhang.bean.People"><property name="dog" ref="dog"/><property name="cat" ref="cat"/>
</bean>

测试方法:

@Test
public void test1() {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");People people = context.getBean("people", People.class);people.getCat().shout();people.getDog().shout();
}

可以正常输出,测试结果:

byName自动装配

修改配置文件,这时候是没有装配的。

<bean id="people" class="com.zhang.bean.People">
</bean>

运行测试方法会出现空指针异常。

修改配置文件,加上autowire="byName"

<bean id="people" class="com.zhang.bean.People" autowire="byName">
</bean>

将会根据名字自动寻找属性名相同的实体类。

注意实体类中的属性名要和id保持一致才能成功装配,假如你的beans.xml文件里面没有配置对应的属性,也是会暴空指针异常的。

现在我修改实体类中的属性名,同时修改beans.xml文件中的配置,

可以自动装配成功。

byType

修改bean.xml里面的配置把autowire="byType"改为autowire="byType",这样就会根据属性的类型自动匹配,这时候beans.xml中的属性名可以和实体类中的属性名不一致。

甚至不设置name属性也能成功输出结果。

<bean id="dog" class="com.zhang.bean.Dog"/>
<bean class="com.zhang.bean.Cat"/><bean id="people" class="com.zhang.bean.People" autowire="byType">
</bean>

但是配置中不能出现两条类型相同的bean,否则就会报错。

使用注解

在配置文件中添加配置

<context:annotation-config/>

导入命名空间和约束

xmlns:context="http://www.springframework.org/schema/context"
xsi:http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"
@Autowired注解

在实体类中的set方法上面添加@Autowired注解

public class People {private Dog dog;private Cat cat;public Dog getDog() {return dog;}@Autowiredpublic void setDog(Dog dog) {this.dog = dog;}public Cat getCat() {return cat;}@Autowiredpublic void setCat(Cat cat) {this.cat = cat;}
}

测试

@Autowired(required=false)

说明:false,对象可以为null;true,对象必须存对象,不能为null。

配合@Qualifier注解使用,可以根据byName的方式自动装配

@Qualifier不能单独使用。

@Autowired
@Qualifier(value = "cat1")
public void setCat(Cat cat) {this.cat = cat;
}
@Resource注解

name后面跟配置对象的id

@Resource(name = "cat1")
public void setCat(Cat cat) {this.cat = cat;
}
  • 当有name属性时,将按该属性进行byName方式查找装配;
  • 没有name属性时,进行默认的byName方式进行装配;
  • 不成功,byType的方式自动装配
  • 都不成功,报错

@Autowired与@Resource区别:

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

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

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

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

Spring学习(五)—— 自动装配相关推荐

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

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

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

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

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

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

  4. Spring 由构造函数自动装配

    转载自  Spring 由构造函数自动装配 Spring 由构造函数自动装配 这种模式与 byType 非常相似,但它应用于构造器参数.Spring 容器看作 beans,在 XML 配置文件中 be ...

  5. Spring IOC容器-自动装配

    1 autowire="byName" 根据名称自动装配,自动去IOC容器中找与属性名同名的引用的对象,并自动注入. <!-- ###############自动装配#### ...

  6. Spring中的自动装配和Autowired

    彻底搞明白Spring中的自动装配和Autowired 一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个 ...

  7. Spring按类型自动装配注入数组、集合、Map

    Spring按类型自动装配注入数组.集合.Map时,是把应用上下文中对应类型的bean装配进集合,而不是直接查找一个对应类型的集合然后注入.以下面这段代码为例: import org.springfr ...

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

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

  9. Spring框架之自动装配

    Spring的IoC容器通过Java反射机制了解了容器中所存在Bean的配置信息,这包括构造方法的结构,属性的信息,而正是由于这个原因,Spring容器才能通过某种规则来对Bean进行自动装配,而无须 ...

  10. [Spring]Bean的自动装配

    Spring支持5种自动装配模式,如下: 1.no --默认情况下,不自动装配,通过"ref"attribute手动设定. 2.buName --根据Property的Name自动 ...

最新文章

  1. Android UI开发详解之ActionBar .
  2. 李开复:走向全球的两大路径,中美何以各占其一
  3. python多级字典嵌套_python – 如何拆分字符串并形成多级嵌套字典?
  4. 什么镜头最适合拍风景_35mm F1.8定焦镜头,拍人拍风景都可以!
  5. 京东发布“下一代智能协同开放平台”战略 助力政企数字化转型
  6. cf----2019-10-06(Slime,Shashlik Cooking,Mysterious Crime)
  7. 测试工程师入门知识点整理
  8. 什么是RST包,什么是三次握手,什么是四次握手
  9. 编译工具make、gmake、cmake、nmake和Dmake的区别
  10. Flutter插件开发--获取Android手机电池信息
  11. dubbo系列九、dubbo路由规则和蓝绿切换
  12. 分布式系统论文精读2:GFS
  13. Flume 海量日志收集利器
  14. 抖音国际版Tik Tok进入IPFS存储网络 Filecon生态进一步扩大
  15. 直播系统定制开发中安卓直播间websocket协议破解还原
  16. 算法中的P问题、NP问题、NP难问题和NP完全问题
  17. 大疆Onboard SDK 3.2玫瑰线例程浅析
  18. VPCS使用教程:模拟GNS3虚拟PC
  19. 解决elementaryos下报错W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169
  20. win10系统用hexo+GitHub搭建博客遇到的坑

热门文章

  1. 处理Oracle数据库服务安全漏洞的几种方法
  2. 科学,宗教和信仰,以及神
  3. 三次函数求近似解(牛顿迭代法/二分法)
  4. 读书笔记:《流畅的Python》第17章 使用future处理并发
  5. c 语言token函数,科普 | Compound的cToken及相关核心函数
  6. 别再盲目复制Compound代码了,Defi借贷项目漏洞分析
  7. Kotlin contract 用法及原理
  8. 李时珍告诉你怎么不得病!放在手机上别丢了
  9. Oracle 数据字典详解
  10. 【一家之言】如果一家SaaS公司越来越像软件公司,那离失败就不远了