(八)装配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),这也是依赖注入的本质. ...
随机推荐
- macbook配置flutter环境变量
打开命令窗口,如果没有文件的,可以手动创建文件 code ~/.bash_profile 打开的文件内容如下,如果新增的空文件,肯定是空白的 如果将flutter存放到了应用中,可以如下操作,如果不是 ...
- Linux如何使用shell命令检测PHP木马防止脚本木马的破坏
1.一句话查找PHP木马 代码如下 # find / -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval\(gun ...
- PHP获取上周一和上个月
PHP获取上周一有个坑,如果今天是周一,获取的是上周一.如果今天是周二到周日,获取的是本周一. 根据传递的页码数和每页显示多少条,获取对应的数据: if ($data['type'] == 'day' ...
- c# combbox删除最后一个item界面不更新
如果c#的combbox删除的item是当前选中的,而且是最有一个(如果不是最后一个,我也不知道会不更新,没有去测试,但是可以收到跟新到其他的item),它不会自动清空显示,而是保存当前选中. 所以要 ...
- Leetcode: Longest Palindromic Substring && Summary: Palindrome
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- python 经典排序算法
python 经典排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.常见的内部排序算 ...
- webpack——Modules && Hot Module Replacement
blog:JavaScript Module Systems Showdown: CommonJS vs AMD vs ES2015 官网链接: Modules 官网链接:Hot Module Rep ...
- 算法习题---3.08循环小数(UVa202)
一:题目 输入整数a和b(<=a<=,<=b<=),输出a/b的循环小数表示以及循环节长度. 例如,a=,b=,小数表示为0.(),循环字节长度为21 当循环节长度超过50时, ...
- python命令行参数解析OptionParser类用法实例
python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下: from opt ...
- (十七)super关键字(转)
--本文摘自孤傲苍狼博客. 一.super关键字