(八)装配Bean(2)
二、在Java类中进行显式的装配
- 显式配置有两种:
1. 一种是在java(本文讲解)
2. 另一种是xml配置文件(第一章有讲)
案例一: 使用java显式装配+@autowired自动装配的方式
- 定义接口 CD.java
package bean;
public interface CD {
void play();
}
- 接口的实现类1 CD1.java
package bean;
import org.springframework.stereotype.Component;
public class CD1 implements CD {
@Override
public void play() {
System.out.println("我是CD11");
}
}
- 接口的实现类2 CD2.java
package bean;
import org.springframework.stereotype.Component;
public class CD2 implements CD {
@Override
public void play() {
System.out.println("我是CD22");
}
}
CDPlayer .java
package bean;
import org.springframework.beans.factory.annotation.Autowired;
public class CDPlayer {
@Autowired
private CD cd1;
public void play() {
cd1.play();
}
}
- 编写java显式配置类 CDConfig.java
package bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration //指定这个雷氏一个配置类,相当于spring xml配置文件中的<beans>标签
public class CDConfig { @Bean //该注解会告诉spring该方法会返回一个对象,且该对象会注册为spring应用杀光你下文的bean。 默认下,
//bean的id与该方法的方法名一样,@Bean(name="")进行修改id名
public CD cd1(){
return new CD1();
} @Bean //该注解会告诉spring该方法会返回一个对象,且该对象会注册为spring应用杀光你下文的bean。 默认下,
//bean的id与该方法的方法名一样,@Bean(name="")进行修改id名
public CD cd2(){
return new CD2();
} @Bean //该注解会告诉spring该方法会返回一个对象,且该对象会注册为spring应用杀光你下文的bean。 默认下,
//bean的id与该方法的方法名一样,@Bean(name="")进行修改id名
public CDPlayer cdPlayer(){
return new CDPlayer();
} }
- 编写测试类
package test; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import bean.CDConfig;
import bean.CDPlayer; public class Test {
public static void main(String[] args) { ApplicationContext context=new AnnotationConfigApplicationContext(CDConfig.class);
CDPlayer cdplayer=(CDPlayer)context.getBean("cdPlayer");
cdplayer.play(); }
}
结果:

案例二: 使用java显式装配+javaConfig手动注入的方式
- 定义接口CD.java
package interfacepackage;
public interface CD {
void play();
}
- 定义接口player.java
package interfacepackage; //定义一个播放器接口
public interface player {
void play();
}
- 定义播放器接口的实现类 CDPlayer .java
package bean; import interfacepackage.CD;
import interfacepackage.player; //创建一个CD播放器,需要一个CD才能播放
public class CDPlayer implements player { private CD cd; public CDPlayer(CD cd) {
this.cd = cd;
} @Override
public void play() { cd.play();
} }
- 定义CD接口的实现类 Music_CD.java
package bean; import interfacepackage.CD; //创建一个音乐CD
public class Music_CD implements CD { @Override
public void play() {
System.out.println("我是音乐CD"); } }
- 定义CD接口的实现类 Movie_CD.java
package bean; import interfacepackage.CD; //创建一个电影CD
public class Movie_CD implements CD { @Override
public void play() {
System.out.println("我是电影CD"); } }
- 定义java配置类 CDPlayerConfig.java
package config; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import bean.CDPlayer;
import bean.Movie_CD;
import bean.Music_CD; //该配置使用java显式配置
@Configuration
public class CDPlayerConfig { @Bean() //该注解告诉spring该方法会返回一个对象,且该对象会被注册为spring应用上下文的bean。
//默认下,该bean的id与方法名一样,可通过@Bean(name="") 设置bean的id名
public Music_CD musci_cd() { return new Music_CD();
} @Bean
public Movie_CD movie_cd() {
return new Movie_CD();
} @Bean
public CDPlayer cdPlayer() {
return new CDPlayer(movie_cd()); //要创建CDPlayer对象其构造方法必须传入一个CD对象,调用movie_cd()
//创建一个Movie_CD对象,也可以调用musci_cd()方法
} }
- 编写测试类Test.java
package test; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import config.CDPlayerConfig;
import bean.CDPlayer; public class Test {
public static void main(String[] args) { ApplicationContext context=new AnnotationConfigApplicationContext(CDPlayerConfig.class);
CDPlayer cdplayer=(CDPlayer)context.getBean("cdPlayer");
cdplayer.play(); }
}
结果:

- 注意 : 默认情况下,spring的bean都是单例的,在java配置类中,

如果有多个CDPlayer类调用movie_cd()方法来获取Movie_cd对象,都是同一个Movie_cd对象。
- 一般情况下,我们不用上图所示的方法来实现依赖。改造上图代码,即修改java配置类 CDPlayerConfig.java 其他文件都不变
package config; import interfacepackage.CD; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import bean.CDPlayer;
import bean.Movie_CD;
import bean.Music_CD; //该配置使用java显式配置
@Configuration
public class CDPlayerConfig { @Bean() //该注解告诉spring该方法会返回一个对象,且该对象会被注册为spring应用上下文的bean。
//默认下,该bean的id与方法名一样,可通过@Bean(name="") 设置bean的id名
public Music_CD musci_cd() { return new Music_CD();
} @Bean
public Movie_CD cd() {
return new Movie_CD();
} @Bean
public CDPlayer cdPlayer(CD cd) {
return new CDPlayer(cd); //cdPlayer方法请求一个参数为CD类型的参数,当spring调用cdPlayer方法创建CDPlayer
//对象的时候,会自动装配一个CD到配置方法之中。
} }
(八)装配Bean(2)的更多相关文章
- 04_IOC容器装配Bean(xml方式)
IOC容器装配Bean(xml方式) 1.Spring 提供配置Bean三种实例化方式 1)使用类构造器实例化(默认无参数) <bean id="bean1" class=& ...
- spring装配Bean过程
主要流程: 1.读取配置文件 2.实例化bean和填充bean属性 这个粗略的流程感觉更像是一个需求,有了这个需求,那么spring内部是怎么处理的呢? 我们知道spring的两个核心接口BeanFa ...
- [spring]03_装配Bean
3.1 JavaBean 3.1.1 JavaBean 是什么 JavaBean 是一种JAVA语言写成的可重用组件. 为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器. Jav ...
- Spring学习系列(三) 通过Java代码装配Bean
上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean 二.通过Java类装配bean 在前面定义了HelloWorldConfig类,并使用@Compon ...
- 装配bean
spring有三种装配bean的方式:隐式装配.java代码装配.xml装配 隐式装配最为省事方便,也称为自动化装配 这三种装配方式可以混搭着来用 在这里通过一个例子来讲述配置 CD的两个实现,一个是 ...
- IOC装配Bean(注解方式)
Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注解 ...
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- spring IOC装配Bean(注解方式)
1 Spring的注解装配Bean (1) Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean (2) Spring的框架中提供了与@Componen ...
- Spring常用注解,自动扫描装配Bean
1 引入context命名空间(在Spring的配置文件中),配置文件如下: xmlns:context="http://www.springframework.org/schema/con ...
- Spring学习笔记—装配Bean
在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...
随机推荐
- Mininet系列实验(三):Mininet命令延伸实验扩展
1 实验目的 熟悉Mininet自定义拓扑三种实现方式:命令行创建.Python脚本编写.交互式界面创建. 2 实验原理 Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使 ...
- linux pthread_cond_signal
pthread_cond_signal函数的作用是发送一个信号给另外一个正在处于阻塞等待状态的线程,使其脱离阻塞状态,继续执行.如果没有线程处在阻塞等待状态,pthread_cond_signal ...
- Delphi BASE64单元EncdDecd的修改
Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...
- WGS84 2 GCJ-02
#include ; ) { x=-x; ff=; } cc=) ff=; ) ff=; } x=tt; ss=x; s2=x; tt=tt*tt; s2=s2*tt; ss=ss-s2* ) ss= ...
- CerntOS7下搭建git服务器
(1).安装git yum安装git,需要ssh的支持.某些版本需要安装git-core,那才是服务器. [root@youxi1 ~]# yum -y install git 创建git用户 [ro ...
- 采购信息记录批导BAPI
转自:https://www.cnblogs.com/freeandeasy/p/11810272.html作者的话: 可以批导创建及修改信息记录的主数据.而且可以对条件中的时间段及其数量等级中的 ...
- Java使用Apache Commons Net实现FTP功能
maven依赖: <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <dependency> ...
- iOS技术面试08:其他
1 客户端安全性处理方式? 1> 网络数据传输(敏感数据[账号\密码\消费数据\银行卡账号], 不能明文发送) 2> 协议的问题(自定义协议, 游戏代练) 3> 本地文件存储(游戏的 ...
- charles 批量重复请求/重复发包工具
本文参考:charles 批量请求 重复发包工具/repeat Charles 让你选择一个请求并重复,在测试后端接口的时候非常有用: Charles将请求重新发送到服务器,并将响应显示为新请求. 如 ...
- 通过js操作,将div设置为contenteditable的内容设为全选状态
因为div设置为contenteitable可编辑的文本内容用 select()选择全部内容不生效,所以只能用下列方法: 先 creatTextRange或者 createRange <div ...