二、在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)的更多相关文章

  1. 04_IOC容器装配Bean(xml方式)

    IOC容器装配Bean(xml方式) 1.Spring 提供配置Bean三种实例化方式 1)使用类构造器实例化(默认无参数) <bean id="bean1" class=& ...

  2. spring装配Bean过程

    主要流程: 1.读取配置文件 2.实例化bean和填充bean属性 这个粗略的流程感觉更像是一个需求,有了这个需求,那么spring内部是怎么处理的呢? 我们知道spring的两个核心接口BeanFa ...

  3. [spring]03_装配Bean

    3.1 JavaBean 3.1.1 JavaBean 是什么 JavaBean 是一种JAVA语言写成的可重用组件. 为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器. Jav ...

  4. Spring学习系列(三) 通过Java代码装配Bean

    上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean 二.通过Java类装配bean 在前面定义了HelloWorldConfig类,并使用@Compon ...

  5. 装配bean

    spring有三种装配bean的方式:隐式装配.java代码装配.xml装配 隐式装配最为省事方便,也称为自动化装配 这三种装配方式可以混搭着来用 在这里通过一个例子来讲述配置 CD的两个实现,一个是 ...

  6. IOC装配Bean(注解方式)

    Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注解 ...

  7. [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. spring IOC装配Bean(注解方式)

    1 Spring的注解装配Bean (1) Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean (2) Spring的框架中提供了与@Componen ...

  9. Spring常用注解,自动扫描装配Bean

    1 引入context命名空间(在Spring的配置文件中),配置文件如下: xmlns:context="http://www.springframework.org/schema/con ...

  10. Spring学习笔记—装配Bean

    在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...

随机推荐

  1. Matlab基础:关于图像的基本操作

    -- %% 学习目标:学习关于图像的基本操作 %% 通过抖动来增强图像的的色彩对比度 clear all; close all; I = imread('cameraman.tif');%读取灰度图像 ...

  2. Android 定义和使用样式

    如图,在stryle.xml中定义样式 然后可以在布局文件中使用样式

  3. Python简单计算数组元素平均值的方法示例

    Python简单计算数组元素平均值的方法示例 本文实例讲述了Python简单计算数组元素平均值的方法.分享给大家供大家参考,具体如下: Python 环境:Python 2.7.12 x64 IDE ...

  4. Python netaddr CIDR转换

    功能 http://netaddr.readthedocs.io/en/latest/tutorial_03.html 将CIDR地址与IP范围相互转化 Convert CIDR to IP rang ...

  5. Android Monkey压力测试(转)

    参考链接:https://www.cnblogs.com/yyh8/p/6707745.html Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Andr ...

  6. 图形学入门(3)——区域填充算法(region filling)

    继续图形学之旅,我们已经解决了如何画线和画圆的问题,接下来要解决的是,如何往一个区域内填充颜色?对一个像素填充颜色只需调用SetPixel之类的函数就行了,所以这个问题其实就是:如何找到一个区域内的所 ...

  7. EM算法之不同的推导方法和自己的理解

    EM算法之不同的推导方法和自己的理解 一.前言 EM算法主要针对概率生成模型解决具有隐变量的混合模型的参数估计问题. 对于简单的模型,根据极大似然估计的方法可以直接得到解析解:可以在具有隐变量的复杂模 ...

  8. Spring jsp 验证 form:errors标签

    1 在model层添加验证规则 @NotNull @Size(min=2,max =30,message="姓名在2-30个字符之间") private String userna ...

  9. Dapper.NET—轻量ORM

    Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一 ...

  10. Codis-dashboard的配置和启停

    Codis-dashboard是集群的管理工具 生成配置文件,即将现有的配置文件输出到指定目录位置: ./codis-dashboard --default-config | tee conf/das ...