【Spring 核心】装配bean(二) JavaConfig装配
前面介绍完了组件扫描和自动装配,这里再来看一下装配bean的另一种方式JavaConfig。
包路径:
src/main/java
com.bonc-|--config--|--CDPlayerConfig.java (配置类)
|--pojo--- |--CompactDisc.java (接口CompactDisc)
|--SgtPeppers.java (类SgtPeppers实现了CompactDisc)
|--MediaPlayer.java (接口 MediaPlayer)
|--CDPlayer.java (类CDPlayer实现了MediaPlayer)
接口 CompactDisc.java
package com.bonc.pojo;
public interface CompactDisc {
void play();
}
实现类 SgtPeppers.java
package com.bonc.pojo;
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);
}
}
接口 MediaPlayer.java
package com.bonc.pojo;
public interface MediaPlayer {
void play();
}
实现类CDPlayer.java
package com.bonc.pojo;
public class CDPlayer implements MediaPlayer{
private CompactDisc cd;
public CDPlayer(){
super();
}
public CDPlayer(CompactDisc cd){
this.cd = cd;
}
public void play() {
cd.play();
}
public void setCd(CompactDisc cd) {
this.cd = cd;
}
}
配置类:(核心内容)
package com.bonc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.bonc.pojo.CDPlayer;
import com.bonc.pojo.CompactDisc;
import com.bonc.pojo.SgtPeppers;
/*
* 背景信息:
* 很多场景下,推荐组件扫描、自动装配。但有些第三方组件是不方便装配的,因此需要显示配置,
* 显示配置有两种JavaConfig或XML。
* 进行显示配置,JavaConfig是更好的方案,因为它更加强大、类型安全、易于重构。
*
* JavaConfig:
* 1.@Configuration表明这是一个配置类,该类应该包含Spring上下文如何创建bean的细节。
* 2.尽管我们可以同时使用组件扫描和显示配置,但在这里我们更加关注显示配置,
* 3.因此我们将CDPlayerConfig的@ComponentScan注解移除掉了。
* 4.JavaConfig是配置代码,意味着它不应该包含任何业务逻辑,也不应该侵入到业务代码中。
* 5.通常会将JavaConfig放到单独的包中,使它与其他应用程序逻辑分离开。
*
* */
@Configuration
public class CDPlayerConfig {
/*
* 方法说明:
* @Bean注解告诉Spring这个方法将会返回一个CompactDisc类型的对象,该对象要注册为Spring应用上下文中的bean
* 方法体包含了最终产生bean实例的逻辑。
* ID:
* 默认情况下,bean的ID与带有@Bean注解的方法名是一样的,在本实例中,bean的默认是sgtPeppers
* 如果要自定义bean的ID,可以设name属性。
*
*
* */
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
/*
* JavaConfig中装配bean的最简单方式就是引用创建bean的方法
* 方法说明:
* cdPlayer没有使用默认的构造器创建实例,而是调用了sgtPeppers()
* Spring会拦截sgtPeppers()的调用,来确保sgtPeppers的单例
* 每次调用sgtPeppers都返回同一个实例
*
* */
@Bean
public CDPlayer cdPlayer(){
return new CDPlayer(sgtPeppers());
}
/*
* 更为简单的方式,cdPlayer请求一个CompactDisc作为参数,
* 通过这种方式引用其他的bean是最佳的选择,因为它不会要求sgtPeppers()方法在同一个配置类中
* 甚至没有要求CompactDisc要在JavaConfig中声明
* 实际上它可以通过组件扫描或XML配置进行配置
* 你可以将配置分散到多个配置类、XML文件、以及自动扫描和装配bean中,只要功能健全即可。
* */
@Bean
public CDPlayer cdPlayer(CompactDisc cd){
return new CDPlayer(cd);
}
/*
* 还可以通过其他风格实现DI功能,不限于构造器和setter方法
* */
@Bean CDPlayer cdPlayer2(CompactDisc compactDisc){
CDPlayer cdPlayer = new CDPlayer();
cdPlayer.setCd(compactDisc);
return cdPlayer;
}
}
【Spring 核心】装配bean(二) JavaConfig装配的更多相关文章
- Spring装配Bean之XML装配bean
在Spring刚出现的时候,XML是描述配置的主要方式,在Spring的名义下,我们创建了无数行XML代码.在一定程度上,Spring成为了XML的同义词. 现在随着强大的自动化配置和Java代码的配 ...
- Spring入门(三):通过JavaConfig装配bean
上一篇博客中,我们讲解了使用组件扫描和自动装配实现自动化装配bean,这也是最好的使用方式. 但是某些场景下,我们可能无法使用自动装配的功能,此时就不得不显式的配置bean. 比如我们引用了一个第三方 ...
- Spring_总结_03_装配Bean(二)_Java配置
一.前言 本文承接上一节:Spring_总结_03_装配Bean(一)之自动装配 上一节提到,装配Bean有三种方式,首先推荐自动装配.当自动装配行不通时,就需要采用显示配置的方式了. 显示配置有两种 ...
- Spring基础篇——bean的自动化装配
上篇博文讲Spring的IOC容器时说道,虽然容器功能强大,但容器本身只是个空壳,需要我们主动放入装配对象,并告诉它对象之间的协作关系,然后容器才能按照我们的指示发挥它的魔力,完成装配bean的使命. ...
- java之Spring(IOC)装配Bean(手动装配、自动装配、注解装配)
在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 <bean id="todo" cla ...
- Spring基础09——Bean的自动装配
1.XML配置的Bean自动装配 SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,而不需要手工去指定要装配的Bean,a ...
- 第2章—装配Bean—通过XML装配Bean
通过XML装配Bean 尽管我们在生成Bean的过程中可以用到很多方法,但我们依然需要Spring的XML配置来完善更多的需求,下面就来介绍下XML装配Bean的过程是怎样的. 3.1创建XML配 ...
- SpringInAction--自动化装配Bean(显示装配之xml配置)
Spring在配置时候有三种方案可选 1.在xml中进行显示配置 2.在java中进行显示配置 3.隐式的Bean发现机制和自动装配 今天学习的 第一种—— 在xml中进行显示配置 老规矩 先创建 C ...
- Spring核心概念(二)
IOC/DI IOC(控制反转):对象(组件)的创建由代码中转移到外部容器(XML,注解) . DI(依赖注入):当类A需要使用类B时,那么我们需要为类A的属性赋值类B的对象. 这种现象我们称为依赖注 ...
- 二、Spring装配Bean
内容 声明bean 构造器注入和Setter方法注入 装配Bean 控制bean的创建和销毁 关键词 装配(wiring) 组件扫描(component scanning) 自动装配(AutoWiri ...
随机推荐
- Java 日志框架终极教程
概述 对于现代的 Java 应用程序来说,只要被部署到真实的生产环境,其日志的重要性就是不言而喻的,很难想象没有任何日志记录功能的应用程序被运行于生产环境中.日志 API 所能提供的功能是多种多样的, ...
- java用户界面—创建一个面板
先从基础学起 创建一个面板 代码如下: package Day08; import java.awt.FlowLayout; import javax.swing.JButton;import jav ...
- 谈一款MOBA游戏《码神联盟》的服务端架构设计与实现
一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者 ...
- 基于.NET CORE微服务框架 -谈谈surging的服务容错降级
一.前言 对于不久开源的surging受到不少.net同学的青睐,也受到.net core学习小组的关注,邀请加入.NET China Foundation以方便国内.net core开源项目的推广, ...
- Serv-U权限设置规则
Serv-U有服务器--域--组--用户四级账号管理规则,每一级都有相应的根目录,目录访问规则和虚拟路径的设置. 同样其他一些重复设置还有很多,如此很容易给人造成混乱--如果我哪里都设置的话会不会造成 ...
- golang windows 安装方法
编译器下载链接:https://golang.org/dl/ 默认安装到C盘,不用修改. 添加环境变量: 配置环境变量: 注:C:\mygo\bin 配置这个后,则可以直接在 Dos ...
- Spring源码情操陶冶-AbstractApplicationContext#prepareBeanFactory
阅读源码有助于陶冶情操,本文承接Spring源码情操陶冶-AbstractApplicationContext#obtainFreshBeanFactory 瞧瞧官方注释 /** * Configur ...
- 在Swift中实现 oc与swift的混编
在Swift中想要引用OC头文件(import),可采用混编的方法,这里以sqlite为例,采用OC-Swift桥的方式实现添加头文件1引入sqlite数据库的库文件 打开工程配置文件,在build ...
- [学习笔记] Splay Tree 从入门到放弃
前几天由于出行计划没有更博QwQ (其实是因为调试死活调不出来了TAT我好菜啊) 伸展树 伸展树(英语:Splay Tree)是一种二叉查找树,它能在O(log n)内完成插入.查找和删除操作.它是由 ...
- Pandas: 如何将一列中的文本拆分为多行? | Python
Pandas: 如何将一列中的文本拆分为多行? 在数据处理过程中,经常会遇到以下类型的数据: 在同一列中,本该分别填入多行中的数据,被填在一行里了,然而在分析的时候,需要拆分成为多行. 在上图中,列名 ...