1. no:默认方式,手动装配方式,需要通过ref设定bean的依赖关系
  2. byName:根据bean的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配
  3. byType:根据bean的类型进行装配,当一个bean的属性类型与其他bean的属性的数据类型一致,则自动装配
  4. constructor:根据构造器进行装配,与 byType 类似,如果bean的构造器有与其他bean类型相同的属性,则进行自动装配
  5. autodetect:如果有默认构造器,则以constructor方式进行装配,否则以byType方式进行装配

(1)no 默认装配方式
示例代码

public class UserServiceImpl implements UserService{@Overridepublic void query() {// TODO Auto-generated method stubSystem.out.println("装配完成");}
}
public class UserDao {private UserServiceImpl userServiceImpl;public void query() {userServiceImpl.query();System.out.println("Dao执行");}public void setUserServiceImpl(UserServiceImpl userServiceImpl) {this.userServiceImpl = userServiceImpl;}
}
<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"><bean id="UserDao" class="com.lyq.zs.UserDao"><property name="userServiceImpl" ref="userServiceImpl"></property>
</bean><bean id="userServiceImpl" class="com.lyq.zs.UserServiceImpl"/>
</beans>
public static void main(String[] args) {// TODO Auto-generated method stubApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");//UserService userService = (UserService)ac.getBean("userServiceImpl");//userService.query();UserDao dao = ac.getBean(UserDao.class);dao.query();}

可以看到,dao执行了自身的query方法

(2)使用 byName 自动装配

只需求修改 xml 配置为

<bean id="UserDao" class="com.lyq.zs.UserDao" autowire="byName"></bean><bean id="userServiceImpl" class="com.lyq.zs.UserServiceImpl"/>

就可以自动装配,需要注意的是,byName方法下,setter方法要与bean的id对应,如bean的id为userServiceImpl,则setter方法就应该是setUserServiceImpl,否则会报错,例如将UserDao改成

public class UserDao {private UserServiceImpl userServiceImpl1;public void query() {userServiceImpl1.query();System.out.println("Dao执行");}public void setUserServiceImpl1(UserServiceImpl userServiceImpl) {this.userServiceImpl1 = userServiceImpl;}
}

则运行出错。

(3)使用 byType 方式自动装配
只需将 autowire 的值改成byType即可,需要注意的是,setter方法的属性必须与bean引用的类的类型相同

(4)使用 constructor 方式自动装配
使用构造器自动装配,只需将 bean 修改成如下

public class UserDao {private UserServiceImpl userServiceImpl;public UserDao(UserServiceImpl userServiceImpl) {this.userServiceImpl = userServiceImpl;}public void query() {userServiceImpl.query();System.out.println("Dao执行");}/*public void setUserServiceImp(UserServiceImpl userServiceImpl) {this.userServiceImpl = userServiceImpl;}*/
}

并将 autowire 的值改成 constructor 即可

(5)使用 autodetect 方式自动装配
该方法会判断是否有默认构造器,如果有,则按照构造器装配,否则按照 byType 进行装配

spring自动装配Bean的五种方式相关推荐

  1. Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire

    创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...

  2. Spring自动装配@Autowired的三种方式

    转自:https://ahaochan.github.io/Java/JavaWeb/Spring/Spring%E8%87%AA%E5%8A%A8%E8%A3%85%E9%85%8D@Autowir ...

  3. 装配bean的三种方式

    第一种:XML装配 xml装配有两种方式: 第一种:利用有参构造方法注入 User类: package com.liu.xml;import java.util.List; //xml装配bean的两 ...

  4. Spring注解创建Bean的几种方式

    Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...

  5. Spring Boot 获取 Bean 的 3 种方式!还有谁不会?

    作者 | chilx 来源 | https://blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 方式一 注解@PostC ...

  6. 记下来 Spring 装配 Bean 的三种方式

    ps:拿笔记一下,面试可能会考.依赖注入DI和面向切面编程AOP是Spring框架最核心的部分.这次主要是总结依赖注入的bean的装配方式. 前言 什么是依赖注入呢?也可以称为控制反转,简单的来说,一 ...

  7. Spring自动装配Bean

    除了使用 XML 和 Annotation 的方式装配 Bean 以外,还有一种常用的装配方式--自动装配.自动装配就是指 Spring 容器可以自动装配(autowire)相互协作的 Bean 之间 ...

  8. spring容器实例化bean的3种方式

    1. 使用公共的无参构造器 2. 使用静态工厂 (与设计模式的工厂无关) 3. 使用实例工厂 (与设计模式的工厂无关) 注解:第一种常用 转载于:https://www.cnblogs.com/wan ...

  9. Spring之装配Bean(一)

    Spring中装配bean的三种主要方式 1.隐式的bean发现机制和自动化装配 组件扫描( component scanning) : Spring会自动发现应用上下文中所创建的bean. 自动装配 ...

最新文章

  1. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载一(PhoneGap中的API)...
  2. jquery: 一些常见的获取
  3. ETL异构数据源Datax_Oracle同步MySQL(全量)_04
  4. 3D空间中射线与三角形的交叉检测算法
  5. win10安装账户卡住_win10安装卡着不动怎么处理 解决win10安装卡死方法
  6. JDK10、JDK11、JDK12新特性
  7. WayOs内置智能重启:自动计算UTC时间为本地时间,可以调整为几时重启
  8. ubuntu 安装ssh 服务
  9. 用百度人工智能进行繁体文字中文OCR识别
  10. 实用分享-MAC修改器(摆脱网络封锁的困扰)
  11. TXT文本 本地词典
  12. RFB(Receptive Field Block)
  13. [读书笔记][深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白...
  14. Android系统WebView无法安装,Android系统进程无法加载WebView
  15. 手机管理应用研究【5】——应用杂篇
  16. Django连接MySQL8.0报错django.db.utils.OperationalError: (1045, “Access denied for user ‘16066‘@‘localhos
  17. 基于Vue的图片裁剪 vue-cropper
  18. 计算机应用能力 中文字处理,职称计算机Word 2003中文字处理考试大纲
  19. 多元线性回归之Spss实现
  20. Unity一键将Text替换成TextMeshPro

热门文章

  1. 云服务器下能安装虚拟机吗,云服务器下能安装虚拟机吗
  2. 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface)
  3. 解析SSM框架的优缺点?
  4. 五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解
  5. java 抽象泛型方法,Java泛型方法 - Only_小白的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 什么是Flat File
  7. python常用函数技巧汇总
  8. android编译空间大小,编译Android源码的坑
  9. 广州楼盘抓取分析1-数据抓取
  10. 基础研究与应用研究的区别