(八)装配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),这也是依赖注入的本质. ...
随机推荐
- maven手动将jar包导入到本地仓库(支持多个仓库选择)
正常我们在用maven搭建项目时,我们只需要将项目所需要的依赖配置到maven的配置文件pom.xml中即可,maven就可以去网上将jar包下载到配置的本地仓库中去.所以一般情况下我们是不需要手动安 ...
- React 高阶组件浅析
高阶组件的这种写法的诞生来自于社区的实践,目的是解决一些交叉问题(Cross-Cutting Concerns).而最早时候 React 官方给出的解决方案是使用 mixin .而 React 也在官 ...
- Web安全测试检查点
Web安全测试检查点 上传功能 1.绕过文件上传检查功能 2.上传文件大小和次数限制 注册功能 1.注册请求是否安全传输 2.注册时密码复杂度是否后台检验 3.激活链接测试 4.重复注册 5.批量注册 ...
- jpeglib.h jerror.h No such file or directory 以及 SDL/SDL.h: 没有那个文件
1. error: jpeglib.h jerror.h No such file or directory 没有那个文件或目录 jpeg.cc:19:21:error: jpeglib.h: 没有那 ...
- Greenwich.SR2版本的Spring Cloud Feign实例
前面我们了解了Spring Cloud Ribbon和Hystrix,在使用上它们基本上会成队出现,那么是不是可以把它们组合起来使用?而且我们发现,在服务消费方a-beautiful-client里通 ...
- webpack——Modules && Hot Module Replacement
blog:JavaScript Module Systems Showdown: CommonJS vs AMD vs ES2015 官网链接: Modules 官网链接:Hot Module Rep ...
- JS微信网页使用图片预览(放大缩小)
前言 需求在微信网页中客户点击图片可进行预览放大缩小功能,网上找了各种js方式实现, 唯一的麻烦就是不兼容或者和项目框架不兼容 次函数只只用于部分客户端,否则会出现 WeixinJSBridge is ...
- [Paper翻译]Scalable Lock-Free Dynamic Memory Allocation
原文: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.87.3870&rep=rep1&type=pdf Abstr ...
- 关于Jmeter+Ant+Jenkins作为接口、性能自动化框架的误区
说明:Apach-Jmeter有完善的桌面客户端,关联数据的处方方式,各种参数化的方式,各种Jar包的扩展,也可以用作抓包工具使用,当然最重要的是它是[开源!开源!开源!],重要的事说三遍,目前也有基 ...
- preg_replace修饰符e的用法
$tmp_refer = postget('refer');$tmp_refer = preg_replace("/tn-(.*?).html/ies", "'tn-'. ...