资讯专栏INFORMATION COLUMN

Spring 装配

Leo_chen / 3084人阅读

摘要:有以下三种配置在中配置在中配置自动装配自动装配这里以转载为例子首先需要建立概念即,定义一个接口只需要实现添加两个注解,定义接口规定方法为启用组件扫描标题内容规定方法为扫描的时候,会直接按照该类所在的包,作为基础包,进行扫描对依赖的实现自动装

有以下三种配置
在xml中配置
在java中配置
bean自动装配

自动装配

这里以转载CD为例子

首先需要建立CD概念

即,定义一个cd接口

只需要实现添加两个注解,

package com.ming;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * 定义cd接口
 * @author ming
 */
@Configuration
@ComponentScan
public interface CompactDisc {
    /**
     * 规定方法为play
     */
    void play();
}
package com.ming;

import org.springframework.stereotype.Component;

/**
 *
 * @author ming
 */

// 启用组件扫描
@Component
class SgtPeppers implements CompactDisc {
    private String title = "标题";
    private String artist = "内容";
    /**
     * 规定方法为play
     */
    @Override
    public void play() {
        System.out.println(this.artist + this.title);
    }
}
package com.ming;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import static org.junit.Assert.*;

public class CompactDiscTest {
    private ApplicationContext applicationContext = null;

    @Before
    public void setUp() throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void play() {
        CompactDisc compactDisc = applicationContext.getBean(CompactDisc.class);
        assertNotNull(compactDisc);
    }
}

扫描的时候,会直接按照该类所在的包,作为基础包,进行扫描

对依赖的实现自动装配

添加注解以后,初始化bean以后,会尽可能的满足bean的依赖

目录如下

package com.ming;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 *
 * @author ming
 */
@Component
public class CDPlay implements MediaPlayer {
    CompactDisc compactDisc = null;

    @Autowired
    public CDPlay(CompactDisc compactDisc){
        this.compactDisc = compactDisc;
    }

    /**
     * 规定方法为play
     */
    @Override
    public void play() {
        compactDisc.play();
    }
}
package com.ming;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * 定义cd接口
 * @author ming
 */
@Configuration
@ComponentScan
public interface CompactDisc {
    /**
     * 规定方法为play
     */
    void play();
}
package com.ming;

import org.springframework.context.annotation.ComponentScan;

/**
 * @author ming
 */
@ComponentScan
public interface MediaPlayer {
    /**
     * 规定方法为play
     */
    public void play();
}
package com.ming;

import org.springframework.stereotype.Component;

/**
 *
 * @author ming
 */

// 启用组件扫描
@Component
class SgtPeppers implements CompactDisc {
    private String title = "标题";
    private String artist = "内容";
    /**
     * 规定方法为play
     */
    @Override
    public void play() {
        System.out.println(this.artist + this.title);
    }
}


    
package com.ming;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import static org.junit.Assert.*;

public class CompactDiscTest {
    private ApplicationContext applicationContext = null;

    @Before
    public void setUp() throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    }

    @After
    public void tearDown() throws Exception {

    }

    @Test
    public void play() {
        MediaPlayer mediaPlayer = (MediaPlayer) applicationContext.getBean(MediaPlayer.class);
        mediaPlayer.play();
        assertNotNull(mediaPlayer);
    }
}

运行结果

在这里,在装配的时候,尽量满足配置规则进行装配

Java代码装配bean

package com.ming;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 *
 * @author ming
 */
@Configuration  // 注解表明这是一个配置类
public class CDPlayerConfig {

    @Bean
    public CompactDisc sgtPeppers(){
        // 此处进行装配
        return new SgtPeppers();
    }

    /**
     * 注入装配
     * @return
     */
    @Bean
    public CDPlay cdPlay(){
        return new CDPlay(this.sgtPeppers());
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74599.html

相关文章

  • Spring核心 装配Bean

    摘要:它的构造器上添加了注解,这表明当创建的时候,会通过这个构造器来进行实例化并且会传入一个可设置给类型的通过自动装配,将一个注入到之中注解不仅能够用在构造器上,还能用在属性的方法上。 Spring配置的可选方案 Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系。当描述bean如何进行装配时,Spring具有非常大的灵活性,它提供了三种主要的装配机制: 在XM...

    wanglu1209 评论0 收藏0
  • Spring - 装配Bean

    摘要:装配任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入配置的可选方案在中进行显示配置在中进行显示配置隐式的发现机制和自动装配自动化装配组件扫描会自动发现应用上下文 装配Bean 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的 创建应用对象之间协作关系的行为通常称为装配(wiring)...

    CNZPH 评论0 收藏0
  • Spring总结(一)

    摘要:如果这个类的方法有修饰,就成为第二种的装配方式代码生成要自动装配的类要保留默认构造函数,需要装配的属性使用来装配。显示装配分为两种,一种是代码装配,一种是装配。和相比,上面这种形式的中的是调用默认构造函数生成的。 Bean的自动装配 通过@ComponentScan扫描发现将要装配到ApplicationContext中的Bean。@ComponentScan中如果没有写包名,那么默...

    OpenDigg 评论0 收藏0
  • 2.走向自动装配

    摘要:走向自动装配模式注解装配走向自动装配课程介绍手动装配自动装配自动装配是以手动装配为基础实现的手动装配模式注解模式注解是一种用于声明在应用中扮演组件角色的注解。 2.走向自动装配 Spring 模式注解装配 2-1 走向自动装配 课程介绍 spring framework手动装配 spring boot自动装配 spring boot自动装配是以spring framework手动装...

    rose 评论0 收藏0
  • 使用Spring annotation编程的快感

    摘要:创建应用对象之间协作关系的行为通常称为装配中有三种装配的方法在中显式配置在中显式配置隐式的发现机制和自动装配这儿要说的就是第三个自动发现与装配,它会带来编程的快感。 一、前言 Spring的Bean Factory所实现的IoC轻量级容器,可以很方便地让大家基于POJO开发JavaEE应用程序。 创建应用对象之间协作关系的行为通常称为装配 Spring中有三种装配Bean的方法 在X...

    BWrong 评论0 收藏0

发表评论

0条评论

Leo_chen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<