二、在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. ubuntu虚拟机安装及vim配置问题(转载)

    virtual box虚拟机Ubuntu系统安装及共享文件夹建立 https://blog.csdn.net/qq_27905767/article/details/82106753 Linux超全v ...

  2. CSS中的cursor属性

    css中的cursor这个属性是用来设置光标形状的. 这个属性定义了鼠标指针放在一个元素边界范围内时所用的光标的形状. 默认值:auto 继承性:yes 出现版本:css2 JavaScript语法: ...

  3. ip6tables命令

    ip6tables命令和iptables一样,都是linux中防火墙软件,不同的是ip6tables采用的TCP/ip协议为IPv6. 语法 ip6tables(选项) 选项 -t<表>: ...

  4. pytest 基本用法

    1.断言用assert,可以进行==,!=,+,-,*,/,<=,>=,is True.False,is not True.False ,in ,not in 等判断. import py ...

  5. 关于Mysql-unknow-column-in-where-clause

    写在前边: 已经很久不更新了啊,整个2月份几乎没有遇到什么新鲜事.直到昨天我又犯了一次傻,貌似只有我犯傻的时候才有材料可以跟大家分享- 问题表现: mysql 报错: unknow column 's ...

  6. centos上安装Python并修复yum

    date: 2019-07-01  18:09:53 author: headsen chen notice: 个人原创 1,安装python3.7: yum install zlib-devel b ...

  7. SQL-W3School-高级:SQL 数据库

    ylbtech-SQL-W3School-高级:SQL 数据库 1.返回顶部 1. 现代的 SQL 服务器构建在 RDBMS 之上. DBMS - 数据库管理系统(Database Managemen ...

  8. angular父组件通过@ViewChild 主动获取子组 件的数据和方法

    1.调用子组件给子组件定义一个名称 <app-footer #footerChild></app-footer> 2. 引入 ViewChild import { Compon ...

  9. 123456---com.twoapp.huanYingMotro--- 幻影摩托

    123456---com.twoapp.huanYingMotro--- 幻影摩托

  10. jQuery学习二

    1.id选择器: // 4.如果页面中多个元素id相同,jquery只会获取第一个id的jquery对象 var jquery = $('#name'); alert(jquery.val()); v ...