装配(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的更多相关文章

  1. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  2. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  3. Spring框架(3)---IOC装配Bean(注解方式)

    IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...

  4. Spring实战2:装配bean—依赖注入的本质

    主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...

  5. Spring基础知识1--环境搭建、bean创建、依赖注入、注解注入

    一.Spring两大核心内容 1.控制反转IOC/DI:  应用本身不负责对象的创建和维护,对象和依赖对象的创建完全交给容器管理. 2.AOP(面向切面编程):通过预编译的方式,在运行期通过动态代理的 ...

  6. Spring 基础知识

    Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...

  7. Spring基础知识之基于注解的AOP

    背景概念: 1)横切关注点:散布在应用中多处的功能称为横切关注点 2)通知(Advice):切面完成的工作.通知定了了切面是什么及何时调用. 5中可以应用的通知: 前置通知(Before):在目标方法 ...

  8. Spring框架(2)---IOC装配Bean(xml配置方式)

    IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...

  9. 1.spring基础知识讲解

    引言:以下记录一些自己在使用时pringle框架时的一些自己心得合成体会时,如有侵权,请联系本博主. 1. spring基本都使用 spring是一个开源的轻量级框架,其目的是用于简化企业级应用程序开 ...

随机推荐

  1. @MarkFan 口语练习录音 20140406 [美女与野兽的口语练习录音]

    大家好,您现在收听的是美女与野兽的口语练习录音 敢于追求,不惧任何挑战,才是勇敢的人生.试想一下,世界上每天有多少人为了梦想,为了生活,甚至是为了别人在不停地奔跑.假若你此刻心中装有梦想,却碍于现实不 ...

  2. 20145230《JAVA程序设计》第2周学习总结

    20145230 <Java程序设计>第2周学习总结 教材学习内容总结 本周我学习了<JAVA学习笔记>中的第三章内容,让我对JAVA有了进一步的了解.第三章主要是介绍JAVA ...

  3. 【转载】如何简单地理解Python中的if __name__ == '__main__'

    原帖:https://blog.csdn.net/yjk13703623757/article/details/77918633 通俗的理解__name__ == '__main__':假如你叫小明. ...

  4. C++逗号表达式

    c++中,逗号表达式的结果是最右边表达式的值

  5. IntelliJ Idea 快捷键精选

    Alt+Enter,导入包,自动修正Ctrl+F,查找文本Alt+Up/Down,上/下移一行:在方法间快速移动定位:与光标位置有关Alt+Shift+Up,多次up可选中一行Ctrl+X,剪切行Ct ...

  6. sg函数的应用

    刚刚接触到sg函数突然感觉到原来可以这么好用,sg函数应该算是博弈论中比较经典的东西了.下面来说说sg函数: 从网上搜集资料终于能看懂了下面解释来自http://www.cnblogs.com/cj6 ...

  7. Codeforces Round #386 (Div. 2) C D E G

    一场比较简单的题 比较脑洞 C 如果坐车比较快的话 先走不如等车 所以最后的ans是min(纯走路,纯坐车) 讨论一下坐车时间 D 因为k一定是>=1的 所以当a=b的时候 GBGBGB这样间隔 ...

  8. Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等...

    1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction 开启事务 •Rollback  回滚事务 •Commit ...

  9. (转)理解Keystone的四种Token

    Token 是什么 通俗的讲,token 是用户的一种凭证,需拿正确的用户名/密码向 Keystone 申请才能得到.如果用户每次都采用用户名/密码访问 OpenStack API,容易泄露用户信息, ...

  10. R语言常用语法总结

    ## 1. 数据输入 ##a$b # 数据框中的变量a = 15 # 赋值a <- 15 # 赋值a = c(1,2,3,4,5) # 数组(向量)b = a[1] # 数组下标,从1开始b = ...