Spring——自动装配(@Autowired/@Profile/底层组件)
本文介绍Spring中关于自动装配的方法和规则,以及@Profile动态激活的用法和一个例子。
一、@Autowired自动装配
@Autowired注解可以加在构造器、属性、方法、方法参数上。
1、自动装配规则
默认优先按照类型去容器中找对应的组件,如果存在多个相同类型,再根据属性名称作为组件id去容器中查找。
我们可以通过@Qualifier配合@Autowired指定要装配的组件的id
也可以在组件上添加@Primary指定首选的bean
@Autowired有一个属性required默认为true,表示一定需要这个组件,如果在容器中找不到对应组件,则会报错。
在组件的有参构造方法中,会自动进行装配,不需要添加@Autowired注解。
2、注意
自动注入最好选择接口而非实现类,防止由于代理的原因出错
二、XXXAware获取底层组件
比如其中的ApplicationContextAware,实现这个接口,就能够得到applicationContext并使用
Red类实现了两个XXXAware接口,下面我们来进行测试
容器启动后打印如下:
说明在对象创建时,会调用接口规定的方法,使我们获取到底层组件
三、@Profile动态激活切换组件
1、注解标注位置
可以添加在配置类或配置类中@Bean修饰的方法上。
如果标在配置类中的@Bean方法上,则满足相应激活条件,才会注册对应的bean
如果直接标在配置类上,满足激活条件可以使用这个配置类,否则配置类中的一切配置无效。
2、激活方法
1)通过添加虚拟机参数
-Dspring.profiles.active="profile1,profile2"
2)通过改变容器环境参数
Spring——自动装配(@Autowired/@Profile/底层组件)的更多相关文章
- Spring自动装配----注解装配----Spring自带的@Autowired注解
Spring自动装配----注解装配----Spring自带的@Autowired注解 父类 package cn.ychx; public interface Person { public voi ...
- 【spring 注解驱动开发】spring自动装配
尚学堂spring 注解驱动开发学习笔记之 - 自动装配 自动装配 1.自动装配-@Autowired&@Qualifier&@Primary 2.自动装配-@Resource& ...
- 20、自动装配-@Autowired&@Qualifier&@Primary
20.自动装配-@Autowired&@Qualifier&@Primary 自动装配:Spring 利用依赖注入(DI),完成对IOC容器中各个依赖关系赋值 20.1 @Autowi ...
- Spring自动装配歧义性笔记
Spring自动装配歧义性笔记 如果系统中存在两个都实现了同一接口的类,Spring在进行@Autowired自动装配的时候,会选择哪一个?如下: // 一下两个类均被标记为bean @Compone ...
- Spring系列七:Spring 自动装配
相思相见知何日?此时此夜难为情. 概述 在Spring框架中,在配置文件中声明bean的依赖关系是一个很好的做法,因为Spring容器能够自动装配协作bean之间的关系.这称为spring自动装配. ...
- Spring 自动装配 Bean
Spring3系列8- Spring 自动装配 Bean 1. Auto-Wiring ‘no’ 2. Auto-Wiring ‘byName’ 3. Auto-Wiri ...
- spring 自动装配 default-autowire="byName/byType"
<PRE class=html name="code">spring 自动装配 default-autowire="byName/byType" ...
- Spring自动装配Bean详解
1. Auto-Wiring ‘no’ 2. Auto-Wiring ‘byName’ 3. Auto-Wiring ‘byType 4. Auto-Wirin ...
- Spring自动装配(二)
为什么Spring要支持Autowire(自动装配) 先写几个类,首先定义一个Animal接口表示动物: 1 public interface Animal { 2 3 public void eat ...
随机推荐
- 单调队列优化 dp
The only difference between easy and hard versions is the constraints. Vova likes pictures with kitt ...
- 聊聊HTTP请求那一些事_HttpWebRequest_一篇就够了
最近工作比较忙,很久没有写东西了,今天抽点时间整体一下最近工作的一个知识点小结.http请求对我们来说一点都不模式,程序员的我们有可能天天就是和这一些打交道.无论是BS架构的程序,前后端的数据交互, ...
- python 进程Queue
1.作用:进程之间的数据交互 2.常用方法 """ 对象.put() 作用:放入队列一个数据 对象.get() 作用:取队列一个数据,若队列没有值,则阻塞 对象.empt ...
- item方法
class Person: def __init__(self, name, age): self.name = name self.age = age def __getitem__(self, i ...
- git branch stash
一.branch(分支) 1.创建分支 git branch dev 2.切换分支 git branch dev 3.合并分支 git merge bug 4.查看分支 git branch 5.删除 ...
- 插画版Kubernetes指南
原文地址:https://www.cnblogs.com/kouryoushine/articles/8007648.html 是根据一个视频翻译过来的,比较形象 编者按:Matt Butcher 是 ...
- 工作笔记-- 源码安装nginx
源码安装nginx 1.安装nginx的依赖包 [root@localhost ~]# yum -y install gcc gcc-c++ openssl openssl-devel pcre pc ...
- 使用Razor表达式 使用条件语句 来自 精通ASP-NET-MVC-5-弗瑞曼
- windows10卸载虚拟机忘记按照步骤卸载的实际问题
好久没有写博客了,由于太多事情,工作需要用到虚拟机,结果,虚拟机出问题,,,怎么办???我的办法就是卸载了重新安装一个,结果呢?太心急没有按照不知操作,今天弄了一下午,终于弄好了... 错误原因,用了 ...
- 在qemu-kvm配置桥接网络
为了宿主机和虚拟机可以很好的通信,当然是选择桥接网络啦!!! 话不多说 ===========================配置桥接网络========================== 虚拟机虽 ...