在spring框架中提供了三种 bean的装配方式,当然这三种装配方式是可以灵活的进行组合使用的,项目中使用最多的是自动装配bean的方式,也就是通过注解的方式进行bean的装配,一下是四种装配方式的介绍:

一、自动化装配bean

spring从两个角度实现自动化装配:

(1)组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean

注:组件扫描在项目中一般是使用XML文件中的启用组件扫描:

<context:component-scan base-package="com.ssc.controller" />

但是,在spring中使用注解的方式启用组件扫描也是可以的,就是@ComponentScan注解,默认会扫描与配置类相同的包。

package soundsystem;
import org.springframework.context.annotation.componentScan;
import org.springframework.context.annotation.Configuration; @configuration
@componentScan
public class CDPlayerConfig{
/*****/
}

可以为@ComponentScan注解设置属性的:

1)@ComponentScan(basePackage="soundsystem")

2)@ComponentScan(basePackage={"soundsystem",“video”})

3)@ComponentScan(basePackageClasses={CDPlayer.class,DVDplayer.class}) 这种是扫描某些特定的class类  

(2)自动装配(autowiring):spring自动满足bean之间的依赖

自动装配就是让spring自动满足bean依赖的一种方法,在满足的过程中,会在spring应用上下文中寻找匹配某个bean需求的其他bean。

自动装配的注解@Autowired 是spring特有的注解,主要有:

1)bean的声明上加@Autowired

@Autowired
private CompactDisc cd;

2)构造器

@Autowires
public CDPlayer(CompactDisc cd){
this.cd = cd;
}

  

3)setter方法或者其他方法  

@Autowires
public void setCompactDisc(CompactDisc cd){
this.cd = cd;
} @Autowires
public void insertDisc(CompactDisc cd){
this.cd = cd;
}

二、通过Java代码装配bean

尽管在很多场景下通过组件扫描和自动装配实现spring的自动化配置是更为推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置spring。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上使用@Component和@Autowired注解的,因此就不能使用自动化装配方案了。

package soundsystem;
import org.springframework.context.annotation.Configuration; @Configuration
 public class CDPlayConfig{  //@Bean注解会告诉spring这个方法会返回一个对象,该对象要注册为spring应用上下文中的bean
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}  //cdPlayer()方法同样使用了@Bean注解,这表明这个方法会创建一个bean实例并将其注册到spring应用上下文中去
 @Bean
public CDPlayer cdPlayer(){
return new CDPlayer(sgtPeppers());
}  //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个CompactDisc到配置方法之中 
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc){
return new CDPlayer(compactDisc);
} //cdPlayer()方法请求一个CompactDisc作为参数,当spring调用cdPlayer()创建CDPlayer bean的时候,它会自动装备一个CompactDisc到配置方法之中
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc){
  CDPlayer cdPlayer = new CDPlayer(compactDisc);
  cdPlayer.setCompactDisc(compactDisc);
return cdPlayer;
}
}

三、通过XML装配bean

这里写一下在XML文件中的几种配置方式:

//简单的bean的声明
<bean id="compactDisc" class="soundsystem.SgtPeppers" /> //借助构造器注入初始化bean
<bean id="cdPlayer" class="soundsystem.CDPlayer">
<constructor-arg ref="compactDisc" />
</bean> <bean id="cdPlayer" class="soundsystem.CDPlayer" c:rd-ref="compactDisc" /> //将字面量注入到构造器中 注意属性为集合的时候可以使用list set标签
<bean id="cdPlayer" class="soundsystem.BlackDisc">
<constructor-arg value="此时此刻" />
<constructor-arg value="许巍" />
<constructor-arg>
<list>
<value>爱情</value>
<value>空谷幽兰</value>
<value>灵岩</value>
<value>此时此刻</value>
<value>救赎之旅</value>
</list>
</constructor-arg>
</bean> //将字面量注入到属性中
<bean id="cdPlayer" class="soundsystem.BlackDisc">
<property name="title" value="此时此刻" />
<property name="artist" value="许巍" />
<property name="tracks">
<list>
<value>爱情</value>
<value>空谷幽兰</value>
<value>灵岩</value>
<value>此时此刻</value>
<value>救赎之旅</value>
</list>
</property>
</bean>
  

四、导入和混合装配

(1)在JavaConfig中引入XML配置package soundsystem;

import org.springframework.context.annotation.Bean;
import org.springgramework.context.annotation.Configration; @Configration
public class CDConfig{ @Bean
public CompactDisc compactDisc(){
return new SgtPeppers();
}
} package soundsystem;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configration;
import org.springframework.context.annotation.Import; //使用@Import注解导入CDConfig
@Configration
@Import(CDConfig.class)
public class CDPlayerConfig{
@Bean
public CompactDisc cdPlayer(CompactDisc compactDisc){
return new SgtPeppers(compactDisc);
}
} package soundsystem;
import org.springframework.context.annotation.Configration;
import org.springframework.context.annotation.Import; //创建soundsystemConfig,使用@Import注解将两个配置类组合在一起
@Configration
@Import(CDConfig.class,CDPlayerConfig.class)
public class soundsystemConfig{ }
package soundsystem;
import org.springframework.context.annotation.Configration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;
//创建soundsystemConfig,使用@Import注解和@ImportResource将配置类和XML文件组合在一起
@Configration
@Import(CDConfig.class)
@ImportResource("classpath:cd-config.xml")
public class soundsystemConfig{ }

(2)在XML配置中应用JavaConfig

//import 引入XML文件
<import resource="cd-config.xml"/>
<bean id="cdPlayer" class="soundSystem.CDPlayer" c:cd-ref="compactDisc">
</bean> //将Javaconfig 类导入到XML文件中
<bean class="soundsystem.CDConfig"/>
<bean id="cdPlayer" class="soundSystem.CDPlayer" c:cd-ref="compactDisc">
</bean> //XML文件中配置JavaConfig类和XML文件的组合
<bean class="soundsystem.CDConfig"/>
<import resource="cdplayer-config.xml"/>

二、spring中装配bean的更多相关文章

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

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

  2. spring学习总结——装配Bean学习二(JavaConfig装配bean)

    通过Java代码装配bean 前言:上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean: 使用场景:比如说,你想要将第三方库中的组件装配到你的应用中,在 ...

  3. Spring入门2. IoC中装配Bean

    Spring入门2. IoC中装配Bean 20131125 前言: 上一节学习了Spring在JavaProject中的配置,通过配置文件利用BeanFactory和ApplicationConte ...

  4. spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入

    <spring扩展点之二:spring中关于bean初始化.销毁等使用汇总,ApplicationContextAware将ApplicationContext注入> <spring ...

  5. spring在IoC容器中装配Bean详解

    1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean ...

  6. 【Spring】Spring中的Bean - 5、Bean的装配方式(XML、注解(Annotation)、自动装配)

    Bean的装配方式 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 文章目录 Bean的装配方式 基于XML的装配 基于注解 ...

  7. 1.2(Spring学习笔记)Spring中的Bean

    一.<Bean>的属性及子元素 在1.1中我们对<Bean>有了初步的认识,了解了一些基本用法. 现在我们进一步理解<Bean>属性及子元素. 我们先来看下< ...

  8. [spring]03_装配Bean

    3.1 JavaBean 3.1.1 JavaBean 是什么 JavaBean 是一种JAVA语言写成的可重用组件. 为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器. Jav ...

  9. Spring 自动装配 Bean

    Spring3系列8- Spring 自动装配 Bean 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiri ...

随机推荐

  1. openpyxl操作excel

    [转] openpyxl库可以读写xlsx格式的文件,对于xls旧格式的文件只能用xlrd读,xlwt写来完成了. python有很多模块都是用来操作excel的,比如xlrd,xlwt,pyExce ...

  2. 小程序-demo:小程序示例-page/component

    ylbtech-小程序-demo:小程序示例-page/component 以下将展示小程序官方组件能力,组件样式仅供参考,开发者可根据自身需求自定义组件样式,具体属性参数详见小程序开发文档. 1. ...

  3. 11_传智播客iOS视频教程_NS前缀和@符号

    NS前缀的有NSLog和NSString Cocoa就是用来开发带界面的应用程序. Foundation框架之中的类.函数绝大多数都是从NextStep来的.看到NS前缀就知道这个类是从哪里来的.是很 ...

  4. Rebel 6 破解版及使用方法

    下载地址:http://www.zeroturnaround.com/jrebel/download/     下载下来的是一个Zip压缩包,打开之后会发现一个jrebel.jar,这就是其最重要的运 ...

  5. 在Visual studio 中解除 TFS 的账号绑定

    在Visual Studio中, 只要使用了TFS, 就会要求输入用户名密码验证 . 但是一旦点击验证对话框下部的:记住用户名密码 以后都不能再修改用户名了. 而且重装Visual Studio 听说 ...

  6. bzoj 1614: [Usaco2007 Jan]Telephone Lines架设电话线【二分+spfa】

    二分答案,然后把边权大于二分值的的边赋值为1,其他边赋值为0,然后跑spfa最短路看是否满足小于等于k条边在最短路上 #include<iostream> #include<cstd ...

  7. 洛谷 P2770 航空路线问题【最大费用最大流】

    记得cnt=1!!因为是无向图所以可以把回来的路看成另一条向东的路.字符串用map处理即可.拆点限制流量,除了1和n是(i,i+n,2)表示可以经过两次,其他点都拆成(i,i+n,1),费用设为1,原 ...

  8. Luogu P1137 旅行计划 【拓扑排序+Dp】By cellur925

    题目传送门 由于满足游览先后顺序从西到东的性质,我们很自然的想到用拓扑排序处理出一个合理的游览顺序. 然鹅,之后呢? 事实上,拓扑排序常与Dp相结合,解决后效性.我们就可以在每次拓扑入队的时候更新答案 ...

  9. 设置Google搜索在新的标签页打开

    Google搜索的结果,默认情况下点击进入是在本标签页打开的,这样就很麻烦, 可以在搜索结果的页面中进行设置,让它在新的标签页显示 搜索结果设置->搜索设置->新的标签页打开

  10. 浅谈算法——Manacher

    字符串算法在各大高级比赛中均有用到,所以,学习好字符串算法对我们而言十分重要.那么,今天我们就给大家介绍一个快速求回文串的算法,Manacher算法,我们也习惯性叫它马拉车算法. 一.引入 首先我们要 ...