创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质。
Spring装配Bean的三种主要机制:
1.在XML中进行显示配置
2.在java中进行显示配置
3.隐式的bean发现机制和自动装配
1.自动化装配
  1.组件扫描:spring会自动发现上下文中创建的Bean
  2.自动装配:Spring自动满足bean之间的依赖
组件扫描
public interface Phone {
void speak();
}
@Component定义组件,@Component("apple")可以指定组件id
@Component
public class Apple implements Phone{
@Override
public void speak() {
System.out.println("apple speak");
}
}
 
创建配置类:
注解@ComponentScan启用了组件扫描,basePackages扫描指定单个包,多个包(basePackages ={"",""})
@Configuration
//@ComponentScan(basePackages = "com.spring.ioc.autowiring")
@ComponentScan(basePackages = {"com.spring.ioc.autowiring","com.spring.di"})
public class PhoneConfig {
}
 
这里也可以不用这个类配置@ComponentScan,可用xml配置
<!-- 启用组件扫描-->
<context:component-scan base-package="com.spring.ioc.autowiring"/>

测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = PhoneConfig.class)
public class PhoneTest {
@Autowired
private Phone phone;
@Test
public void checkPhone(){
phone.speak();
Assert.assertNotNull(phone);
}
}
 
自动装配

@Autowired
public class Xiaoming {
private Phone phone;
//这里不管是构造方法、set方法、普通方法@Autowired都能自动装配
@Autowired
public Xiaoming(Phone phone) {
this.phone = phone;
} public void speak(){
phone.speak();
}
}
 
2.通过java代码装配bean
代码如下:
public class XiaoMi implements Phone{
@Override
public void speak() {
System.out.println("小米。。。。。。");
}
}
创建配置类:
@Configuration
public class JavaConfig { @Bean
public Phone getPhone(){
return new XiaoMi();
}
}  
junit测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JavaConfig.class)
public class JavaConfigTest {
@Autowired
private Phone phone;
@Test
public void checkPhone(){
phone.speak();
Assert.assertNotNull(phone);
}
}
也可以通过如下main测试
public static void main(String[] args) {
//加载java配置类获取Spring应用上下文
ApplicationContext ac = new AnnotationConfigApplicationContext(JavaConfig.class);
XiaoMi xiaoMi= ac.getBean(XiaoMi.class);
xiaoMi.speak();
}
3.在XML中进行显示配置
声明bean用<bean id="xxx" class="xxx">标签

《Spring in action》之装配Bean的更多相关文章

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

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

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

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

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

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

  4. java之Spring(IOC)装配Bean(手动装配、自动装配、注解装配)

    在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 <bean id="todo" cla ...

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

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

  6. Spring 通过Java代码装配bean

    1. 背景 书接上文Spring自动化装配bean 尽管在很多场景下通过组件扫描和自动装配实现Spring的自动化扫描配置是更为推荐的方式,但在有些情况下自动化扫描的方案行不通,如想要将第三方库中的组 ...

  7. Spring学习总结之---装配Bean

    Spring配置的可选方案 前言:Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,作为开发人员,你需要告诉Spring容器要创建那些Bean,以哪种方式创建,并且如何将 ...

  8. Spring 通过XML配置装配Bean

    使用XML装配Bean需要定义对于的XML,需要引入对应的XML模式(XSD)文件,这些文件会定义配置Spring Bean的一些元素,简单的配置如下: <?xml version=" ...

  9. Spring基础知识之装配Bean

    装配(wiring):创建应用对象之间协作关系的行为.这是依赖注入的本质. Spring配置的可选方案 Spring提供了三种装配机智: 1)在XML中进行显示装配 2)在java中进行显示装配 3) ...

  10. Spring IOC 一——容器装配Bean的简单使用

    下文:SpringIOC 二-- 容器 和 Bean的深入理解 写在前面 这篇文章去年写的,缘起于去年某段时间被领导临时"抓壮丁"般的叫过去做java开发,然后在网上找了一个 Sp ...

随机推荐

  1. gitlab&Jenkins 详细介绍及其应用

    第1章 gitlab 1.1 系统环境 [root@jenkins ~]# cat  /etc/redhat-release CentOS Linux release 7.2.1511 (Core) ...

  2. spring data elasticsearch的 @Documnet 和 @Field 注解

    @Documnet 注解 public @interface Document { String indexName(); //索引库的名称,个人建议以项目的名称命名 String type() de ...

  3. 2017杭电多校第六场1011Classes

    传送门 Classes Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  4. php-5.3源码编译autoconf版本不符合解法

    1. 网上下载符合版本的autoconf 2. 卸载本地原本的autoconf 3. 解压autoconf 后进入目录 ./configure && make && s ...

  5. 百度AI车牌识别测试

    测试背景 百度已发布诸多AI应用,其中包含车牌识别,免费使用量是200次/日.付费的话,按月调用次数在20万次到50万次之间,每日10000次,月费用为0.0035*300000=1050元. 详见: ...

  6. ubuntu+ngnix+thinkphp pathinfo配置

    一.thinkphp 项目改为pathinfo模式 XXX/ThinkPHP/Conf/convention.php文件中找到 'URL_MODEL' => 1, // URL访问模式,可选参数 ...

  7. java继承问题

    代码: 父类: public class Father { public Father() { System.out.println("基类构造函数{"); show(); new ...

  8. 并发编程学习笔记(15)----Executor框架的使用

    Executor执行已提交的 Runnable 任务的对象.此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节.调度等)分离开来的方法.通常使用 Executor 而不是显式地创建 ...

  9. CAD得到指定条件的实体

    主要用到函数说明: IMxDrawSelectionSet::Select2 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARI ...

  10. Don't make me think [读书笔记] [思维导图]

      <Don't make me think>第3版 内容:解析用户心理,在用户模式.扫描设计.导航设计.主页布局.可用性测试,提出了许多的独到观点及建议. 特色:语言轻松.实在.配有许多 ...