博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二、spring中装配bean
阅读量:5076 次
发布时间:2019-06-12

本文共 4448 字,大约阅读时间需要 14 分钟。

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

一、自动化装配bean

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

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

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

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

package soundsystem;import org.springframework.context.annotation.componentScan;import org.springframework.context.annotation.Configuration;@configuration@componentScanpublic 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

@Autowiredprivate CompactDisc cd;

2)构造器

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

  

3)setter方法或者其他方法  

@Autowirespublic void setCompactDisc(CompactDisc cd){    this.cd = cd;}@Autowirespublic 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
//将字面量注入到构造器中 注意属性为集合的时候可以使用list set标签
爱情
空谷幽兰
灵岩
此时此刻
救赎之旅
//将字面量注入到属性中
爱情
空谷幽兰
灵岩
此时此刻
救赎之旅
  

四、导入和混合装配

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

import org.springframework.context.annotation.Bean;import org.springgramework.context.annotation.Configration;@Configrationpublic 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文件
//将Javaconfig 类导入到XML文件中
//XML文件中配置JavaConfig类和XML文件的组合

转载于:https://www.cnblogs.com/ssh-html/p/9614624.html

你可能感兴趣的文章
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>