Spring中装配bean的三种主要方式

1.隐式的bean发现机制和自动化装配

组件扫描( component scanning) : Spring会自动发现应用上下文中所创建的bean。
自动装配( autowiring) : Spring自动满足bean之间的依赖。

通过@Component注入bean

import org.springframework.stereotype.Component;
@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);}
}

通过@Autowire构造器注入或set方法注入

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class CDPlayer implements MediaPlayer {private CompactDisc cd;@Autowiredpublic CDPlayer(CompactDisc cd) {this.cd = cd;}public void play() {cd.play();}
}

通过@ComnentScan注解启用组件扫描,扫描类所在包以下,@Configuration声明配置类

@Configuration
@Component
public class CDPlayerConfig{}

或者直接通过xml配置启用组件扫描,扫描指定包以下

<context:conponent-scan base-package="soundststem">

这样,spring容器自动从指定包下装载含有@component的类和实例成员属性。

2.基于Java的显式配置

在进行显式配置时, JavaConfig是更好的方案,因为它更为强大、 类型安全并且对重构友好。 因为它就是Java代码,就像应用程序中的其他Java代码一样。尽管不是必须的, 但通常会将JavaConfig放到单独的包中, 使它与其他的应用程序逻辑分离开来。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CDPlayerConfig {@Beanpublic CompactDisc compactDisc() {return new SgtPeppers();}@Beanpublic CDPlayer cdPlayer(CompactDisc compactDisc) {return new CDPlayer(compactDisc);}
}

创建JavaConfig类的关键在于为其添加@Configuration注解, @Configuration注解表明这个类是一个配置类, 该类应该包含在Spring应用上下文中如何创建bean的细节。要在JavaConfig中声明bean, 我们需要编写一个方法, 这个方法会创建所需类型的实例, 然后给这个方法添加@Bean注解。@Bean注解会告诉Spring这个方法将会返回一个对象, 该对象要注册为Spring应用上下文中的bean。 方法体中包含了最终产生bean实例的逻辑。

借助JavaConfig实现注入
构造方法:

 @Beanpublic CDPlayer cdPlayer(CompactDisc compactDisc) {return new CDPlayer(compactDisc);}

setter方法:

 @Beanpublic CDPlayer cdPlayer(CompactDisc compactDisc) {CDPlayer cdPlayer = new CDPlayer(compactDisc);cdPlayer.setCompactDisc(compactDisc);return new cdPlayer;}

3、基于XML的显式配置

在使用XML为Spring装配bean之前, 你需要创建一个新的配置规范。在使用JavaConfig的时候, 这意味着要创建一个带有@Configuration注解的类, 而在XML配置中, 这意味着要创建一个XML文件, 并且要以元素为根。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:c="http://www.springframework.org/schema/c"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

声明一个bean

 <bean id="compactDisc" class="soundsystem.BlankDisc">

构造器注入方式配置

<bean id="cdPlayer" class="soundsystem.CDPlayer"><constructor-arg ref="compactDisc" /></bean>

setter属性方式注入

<bean id="cdPlayer" class="soundsystem.properties.CDPlayer"><property name="compactDisc" ref="compactDisc" /></bean>

以上这些配置方案都不是互斥的,我们可能会同时使用自动化和显式配置,根据自身的需求进行选择即可。

Spring之装配Bean(一)相关推荐

  1. spring(2)装配Bean

    [0]README 0)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review  spring(2)装配Bean 的相关知识: 1)在sprin ...

  2. spring三: 装配bean( 在xml中进行显式配置, 在java中进行显式配置)

    ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class); SpringCon ...

  3. spring二:装配bean(自动装配)

    创建应用对象之间协作关系的行为通常称为装配(wiring),这就是依赖注入(DI)的本质. Spring提供了三种主要的装配机制: 1. 在xml中进行显式配置.  2. 在java中进行显式配置. ...

  4. Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire

    创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...

  5. Spring自动装配Bean

    除了使用 XML 和 Annotation 的方式装配 Bean 以外,还有一种常用的装配方式--自动装配.自动装配就是指 Spring 容器可以自动装配(autowire)相互协作的 Bean 之间 ...

  6. Spring基础—装配bean(一)

    在讲解Spring配置beans之前首先想一下一部成功的电影都需要哪些成员参与.首先,最重要的是要有导演.编剧.演员和投资人:其次,还有没那么明显的成员,音乐人.特技演员和艺术指导:此外,还有其他很重 ...

  7. Spring笔记——装配Bean

    1.Spring配置的可选方案 在XML中进行显式配置. Java中进行显式配置. 隐式的bean发现机制和自动装配. 2.自动化装配bean Spring从两个角度来实现自动化装配: 组件扫描(co ...

  8. Spring 自动化装配Bean

    声明一张cd的接口: public interface CompactDisc {public abstract void play(); } 实现cd接口: @Component("Sgt ...

  9. spring自动装配Bean的五种方式

    no:默认方式,手动装配方式,需要通过ref设定bean的依赖关系 byName:根据bean的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配 byType:根据bean的类型 ...

最新文章

  1. 神经网络设计与分析之sin函数拟合分析
  2. 在 mac OS 中安装 xgboost python 包
  3. stm32 systick定时器
  4. 1.7 Java try catch finally语句
  5. Linux基础第一章 概述
  6. 近期低分纯生信友好的期刊简介
  7. 假设用于通信的电文由字符集{a,b,c,d,e,f,g}中的字母构成。 它们在电文中出现的频度分别为{0.31,0.16,0.10,0.08,0.11,0.20,0.04}。【MOOC答案】
  8. 光遇服务器维护都在干什么,光遇:全图毕业后该做什么?老玩家建议,这四件事不做会后悔...
  9. leetcode 46. 全排列 思考分析
  10. 输出奇数和偶数(Java)
  11. telnet怎么算成功_有机肥发酵剂有的作用,怎么才算发酵成功?
  12. JAVA使用bean配置ftp_FTP文件上传(By)java
  13. 库、教程、论文实现,这是一份超全的PyTorch资源列表(Github 2.2K星)
  14. stm32for循环几个机械周期_带你了解包装机械设备的可调度性分析
  15. doc和docx、xls和xlsx、ppt和pptx有什么区别?
  16. 2021 年百度之星·程序设计大赛 - 初赛一、二
  17. 2019最新好听DJ舞曲精选(51-70)【WAV/百度】
  18. 联想微型计算机m8000u配置,联想的产品介绍-20210412075714.pdf-原创力文档
  19. Linux7网卡绑定后mac一样,如何解决双网卡bond0绑定模式物理成员口的mac地址和bonding接口mac地址不一致......
  20. 【嵌入式09】STM32串口通信,发送Hello Windows示例

热门文章

  1. 漫游kafka实战篇之搭建Kafka开发环境
  2. 数据结构与算法 | 循环队列
  3. MySql数据库中的子查询使用
  4. 科普扫盲,HTTP Status Code详解,从此排错无忧!
  5. 互动场景下的低延迟编码技术
  6. 视频加速方案的最优解 - Xilinx硬件加速技术专场
  7. 为什么微信推荐这么快?
  8. 亿级流量场景下的平滑扩容:TDSQL的水平扩容方案实践
  9. 腾讯AI Lab:深度解读AI辅助翻译的研究及应用
  10. 解剖 Nginx ·自动脚本篇(1)解析配置选项脚本 auto/options