Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质。
Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些bean并且如何将其装配在一起。
1、Spring提供了三种主要的装配机制
- 在XML文件中进行显示装配;
- 在Java代码中显示装配;(JavaConfig)
- 隐式的bean发现机制和自动装配;(注解)
2、如何选择装配机制?
完全可以灵活配置。
但作者建议尽可能地使用自动装配机制,且显示配置越少越好。
当必须显示配置bean(有些源码不是由你维护,而你需要为这些代码配置bean),作者推荐使用类型安全并且比XML更加强大的JavaConfig。
只有当你想使用便利的XML命名空间,并且在JavaConfig中没有同样的实现时,才应该使用XML。
3、Spring怎么实现自动化装配?
- 组件扫描(component scanning):Spring自动发现应用上下文所创建的bean;
- 自动装配(autowiring):Spring自动满足bean之间的依赖
两者组合能发挥强大的威力,能够将显示配置降低到最少。
需要了解的是,在自动装配时,不要在意装配的bean来自哪里。自动装配机制会考虑到容器中所有的bean,不管它是在JavaConfig or XML中声明还是通过组件扫描获取到的。只要bean在同一个Spring应用上下文中就行。
4、几种开启组件扫描的方式:
JavaConfig:
/*这是一个用于专用于设置配置的Java类*/
@Configuration //声明这是配置类
@ComponentScan //开启组件扫描
public class JavaConfigClass{ }
@ComponentScan 默认扫描与配置类相同的包(肯定就包括子包啦)。
@ComponentScan(basePackages={“Package1”,“Package2”})也可以通过basePackages属性指定一个或者多个基础包,但是这样并不安全。
@ComponentScan(basePackages={AAA.class,BBB.class}),这些类所在包会作为组件扫描的基础包。还可以专门创建一个空标记接口,用于标记基础包,这样可以保持对重构的友好。
XML:
<context:component-scan base-package="com.biguo.xxx"/>
5、自动装配中的注解
@Component("String ID"):该类会作为组件类,并告知Spring要为这个类创建bean。
Spring应用上下文中所有的bean都会给定一个ID,若没有明确指定,Spring会根据类名为其指定一个ID,默认为把类名第一个字母小写。
(JavaConfig中,@Named("String ID")效果相同)
@Autowired
常用于构造器、setter方法,当Spring创建它们所在对象的bean时,会传入一个相应参数类型的bean,即自动满足所创建bean 的(对另一个bean的)依赖。
(这里就要考虑所依赖的bean存在不存在、有多少个的问题啦)
(JavaConfig中,为@Inject)
6、JavaConfig中声明bean
@Bean——告诉Spring这个方法返回一个对象,该对象要注册为Spring应用上下文中的bean,bean的默认ID和这个方法名一致,也可以用name属性自定义啦。
Spring会拦截所有对@Bean注解的方法的调用,确保直接返回这个方法创建的bean,而不是让其执行实际调用。 (这个bean还可以重复使用,因为Spring默认单例模式)
7、关于混合配置
JavaConfig中引用XML配置——@Import(xx.class)、@ImportResource("classpath:xxx.config.xml")
XML配置中引用JavConfig~~~
Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire的更多相关文章
- spring在IoC容器中装配Bean详解
1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...
- Spring入门2. IoC中装配Bean
Spring入门2. IoC中装配Bean 20131125 前言: 上一节学习了Spring在JavaProject中的配置,通过配置文件利用BeanFactory和ApplicationConte ...
- 7 -- Spring的基本用法 -- 7... 创建Bean的3种方式
7.7 创建Bean的3种方式 ① 调用构造器创建Bean. ② 调用静态工厂方法创建Bean. ③ 调用实例工厂方法创建Bean. 7.7.1 使用构造器创建Bean实例. 使用构造器来创建Bean ...
- spring实战第二章小记-装配bean
时间:2020/02/06 一.思想 1.创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质. 对于上面这句话的个人理解:当我们在new一个对象时如果传入了别的对象作为参数(这个 ...
- Spring实战——通过Java代码装配bean
上篇说的是无需半行xml配置完成bean的自动化注入.这篇仍然不要任何xml配置,通过Java代码也能达到同样的效果. 这么说,是要把上篇的料拿出来再煮一遍? 当然不是,上篇我们几乎都在用注解的方式如 ...
- Spring自动装配Bean的五种方式
在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过“ref”属性手动设定,在项目中最常用byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的 ...
- 001-Spring在代码中获取bean的几种方式
一.概述 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类Applicati ...
- Spring在代码中获取bean的几种方式
方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObj ...
- Spring在代码中获取bean的几种方式(转:http://www.dexcoder.com/selfly/article/326)
方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObj ...
随机推荐
- LinkedBlockingQueue和ArrayBlockingQueue的异同
相同: 1.LinkedBlockingQueue和ArrayBlockingQueue都实现了BlockingQueue接口: 2.LinkedBlockingQueue和ArrayBlocking ...
- ArcGIS超级工具-征地部标准坐标导出导入 SPTOOLS
ArcGIS超级工具简称SPTOOLS 1.1征地部标准坐标导出 界面如下: 操作视频: https://weibo.com/tv/v/HvpNBrfeq?fid=1034:4374872936357 ...
- SpringMVC之ajax与表单 Post 数据提交差异小结
最近在写一个富文本框的后台数据服务的时候遇到一些关于 ajax 提交与 表单提交的比较特殊的案例,这里拿来跟大家分享,希望能让大家有所启发. 1. 首先是常见表单提交在SpringMVC的控制器中的代 ...
- python连接mysql数据库(MySQL)
在介绍python在数据库中的操作之前先简单介绍点mysql中的操作语言: [root@elk-server --]# mysql -u root -p Enter password: Welcome ...
- Windows10 64位 安装 Docker
本文主要介绍Docker在Windows下的安装.关于Docker的介绍和文档在其官网中可以找到:http://www.docker.com .安装环境:Windows10 64位. Docker引擎 ...
- Linux学习笔记之系统中的分区和文件系统
转自 http://blog.csdn.net/hanxuehen/article/details/8229472
- python基础----pymysql模块
安装pymysql ----pip install mysql 步骤: 1.建立连接 指定ip.端口号.密码.账号.数据库 2.建立游标 3.执行sql语句 4.获取结果或提交 5.关闭游标, ...
- 微信小程序如何修改本地缓存key中的单个数据
假如用户注册后,获得用户手机号和userid,realName默认为0,然后进入B页面进行实名认证,认证成功后realName变为1,再更新缓存里的用户信息. A页面用户注册后,存储用户信息: var ...
- json转换成dart类 JSON to Dart
json_to_dart的使用 如果我们得到一个特别复杂的JSON,有时候会无从下手开始写Model,这时候就可以使用一些辅助工具.我认为json_to_dart是比较好用的一个.它可以直接把json ...
- 《精通并发与Netty》学习笔记(15 - 详解NIO中Buffer之position,limit,capacity)
一.前言熟悉NIO的人想必一定不会陌生buffer中position,limit,capacity这三个属性吧,之前在学习的时候遇到一个问题:就是当你先往缓冲区写入一部分数据,然后调用flip()方法 ...