Spring基础知识之装配Bean
装配(wiring):创建应用对象之间协作关系的行为。这是依赖注入的本质。
Spring配置的可选方案
Spring提供了三种装配机智:
1)在XML中进行显示装配
2)在java中进行显示装配
3)隐式Bean发现机制和自动装配
自动化装配
Spring从两个角度来实现自动化装配:
1)组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
2)自动装配(autowiring):Spring自动满足bean之间的依赖。
创建可被发现的bean
案例:使用CD与CD播放器来实现为什么有注入跟依赖。
CD:作为一个接口,定义了CD播放器对CD的一系列操作,同时将CD播放器与CD本身的耦合降到最低
public interface CompactDisc {
void play();
}
CD的具体实现:
注:@Component。这个注解表明该类会作为组件类,并告知Spring要为这个类创建bean。
@Component
public class SgtPeppers implements CompactDisc {
private String title = "Sgt .Pepper's Lonely Hearts Club Band ";
private String artist = "The Beatles";
public void play() {
System.out.println("Playing " + title + " by " + artist);
}
}
配置组件扫描类:
注:@ComponentScan,该注解会默认扫描配置类的包及其子包下所有带有@Component的类
如果使用XML格式的话使用:<context: component-scan>元素
@ComponentScan
@Configuration
public class CDPlayerConfig {
}
测试类代码:
注:@ContextConfiguration会告诉它需要在CDPlayerConfig中加载配置,而CDPlayerConfig包含注解@ComponentScan,会对其包及其子包下的所有带有@Component类扫描,并为其生成bean
@ContextConfiguration(classes = CDPlayerConfig.class)
public class CDplayerTest { @Autowired
private CompactDisc compactDisc; @Test
public void Test() {
compactDisc.play();
}
}
为组件扫描的bean命名
Spring应用上下文中所有的bean都会给定一个ID。默认是小写类名。
若想改变这个ID:只要修改注解即可
@Component("myselfBean")
public class SgtPeppers implements CompactDisc {
。。。
}
设置组件扫描的基础包
我们目前没有为@ComponentScan设置任何属性,默认会以配置类所在的包为基础包来扫描组件。
可以通过以下设置扫描包名称:
@Configuration
@ComponentScan("com")
public class CDPlayerConfig {
}
若想指明基础包:
@Configuration
@ComponentScan(basePackages = "com")
public class CDPlayerConfig {
}
还可以扫描多个基础包:
@Configuration
@ComponentScan(basePackages = {"com","cn"})
public class CDPlayerConfig {
}
还提供了另一种方法,将指定为包中所包含的类或接口:
注:可以为一定要扫描的包中创建一个专门用于扫描的组件类,
@Configuration
@ComponentScan(basePackageClasses = {CDPlayerConfig.class, Test.class})
public class CDPlayerConfig {
}
通过为bean添加注解实现自动装配
自动装配:Spring自动满足bean依赖的一种方式。可以借助@Autowired实现自动装配。
@Component
public class CDPlayer implements MediaPlayer{
@Autowired
private CompactDisc compactDisc; public void play() {
compactDisc.play();
}
}
通过java代码装配bean
创建配置类
注:@Configuration表明该类是一个配置类,该类应该包含Spring应用上下文中如何创建bean的细节。
@Configuration
public class CDPlayerConfig {
}
声明简单的bean
注:@Bean会告诉Spring返回的对象是Spring应用上下文的bean。@Bean的name属性可以设置其名称,默认情况下名称与方法名一致。
@Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc getCompactDisc() {
return new SgtPeppers();
}
}
XML格式的就不在记录
Spring基础知识之装配Bean的更多相关文章
- Spring实战3:装配bean的进阶知识
主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...
- Spring基础知识
Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...
- Spring框架(3)---IOC装配Bean(注解方式)
IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...
- Spring实战2:装配bean—依赖注入的本质
主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...
- Spring基础知识1--环境搭建、bean创建、依赖注入、注解注入
一.Spring两大核心内容 1.控制反转IOC/DI: 应用本身不负责对象的创建和维护,对象和依赖对象的创建完全交给容器管理. 2.AOP(面向切面编程):通过预编译的方式,在运行期通过动态代理的 ...
- Spring 基础知识
Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...
- Spring基础知识之基于注解的AOP
背景概念: 1)横切关注点:散布在应用中多处的功能称为横切关注点 2)通知(Advice):切面完成的工作.通知定了了切面是什么及何时调用. 5中可以应用的通知: 前置通知(Before):在目标方法 ...
- Spring框架(2)---IOC装配Bean(xml配置方式)
IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...
- 1.spring基础知识讲解
引言:以下记录一些自己在使用时pringle框架时的一些自己心得合成体会时,如有侵权,请联系本博主. 1. spring基本都使用 spring是一个开源的轻量级框架,其目的是用于简化企业级应用程序开 ...
随机推荐
- [POI2008]账本BBB
题目 BZOJ 做法 明确: \(~~~1.\)为了达到目标分数所取反的次数是固定的 \(~~~2.\)为了满足前缀非负,得增加取反和滚动次数 滚动的次数可以枚举,增加的取反可以通过最小前缀和得到 滚 ...
- jQuery可放大预览的图片滑块
在线演示 本地下载
- awk中打印连续多列,或者删除多列的技巧
问题:比如有一个文件是20列,你只要后面的18列,怎么打印. 方法:把第一列和第二列做空:用print打印 [wangjq@mgmt humandb]$ cat test 1 2 3 4 5 6 7 ...
- web框架详解之三Modal
一.Modal操作之创建表,添加数据 1. 配置Django中settings的设置连接mysql数据库,然后在mysql数据库中创建库 2. 在models中创建表.继承Model 3. 在sett ...
- Qt构造函数的参数:QObject *parent = Q_NULLPTR
几乎所有的Qt类的构造函数都会有一个parent参数.这个参数通常是QObject* 或者是 QWidget* 类型的.很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题.于是, ...
- Pandas的 loc iloc ix 区别
先看代码: In [46]: import pandas as pd In [47]: data = [[1,2,3],[4,5,6]] In [48]: index = [0,1] In [49]: ...
- maven setting.xml 存放位置导致deply失败,显示没有权限401错误
settings.xml存在于两个地方: 1.安装的地方:$M2_HOME/conf/settings.xml 2.用户的目录:${user.home}/.m2/settings.xml 我只在mav ...
- Linux 一键安装 webmin/virtualmin
Webmin是一个可运行于Linux/freebsd的web界面的主机管理系统,而Virtualmin是一个基于Webmin的虚拟主机管理模块. webmin官方站: http://www.webmi ...
- 【codevs1907】方格取数3(最大流最小割定理)
网址:http://codevs.cn/problem/1907/ 题意:在一个矩阵里选不相邻的若干个数,使这些数的和最大. 我们可以把它看成一个最小割,答案就是矩阵中的所有数-最小割.先把矩阵按国际 ...
- QT 创建对话框 Dialog 实例
1. 2. dialog.h 头文件 #ifndef DIALOG_H #define DIALOG_H #include <QDialog> QT_BEGIN_NAMESPACE cla ...