装配Bean


Spring配置的可选方案

  • 隐式的bean发现机制和自动装配。
  • 在Java中进行显示配置。
  • 在XML中进行显示配置。

1.自动化装配bean

Spring从两个角度来实现自动化装配:

  • 组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
  • 自动装配(autowiring):Spring自动满足bean之间的依赖。

组件扫描

1、创建接口

package com.ql;

public interface CompactDisc {
    void play();
}

2、创建实现类

package com.ql;

import org.springframework.stereotype.Component;

/**
 * @Component 作为组件类
 */
//@Component
@Component("otherName")
public class SgtPeppers implements CompactDisc {

    private String title = "Sgt.Pepper's Lonely Hearts Club Band";
    private String artist = "The Beatles";

    @Override
    public void play() {
        System.out.println("Playing " + title + "by " + artist);
    }
}

3、启动组件扫描

  • 3.1、 通过JavaConfig启动组件扫描
package com.ql;

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

/**
 * @ComponentScan 启动组件扫描
 * 扫描该包及其子包
 */
@Configuration
//@ComponentScan
//@ComponentScan("com.ql")
//@ComponentScan(basePackages = {"com.ql","com.ql2"})
@ComponentScan(basePackageClasses = {SgtPeppers.class, DVDPlayer.class})
public class CDPlayerConfig {
}
  • 3.2、通过XML启动组件扫描
<context:component-scan base-package="com.ql"/>

自动装配

1、@Autowired注解通过构造器注入:

package com.ql;

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

public class CDPlayer implements MediaPlayer {

    private CompactDisc compactDisc;

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

    @Override
    public void play() {

    }
}

2、@Autowired注解任意方法注入:

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

2.Java配置bean

1、创建配置类并声明简单的bean

package com.ql;

@Configuration
public class CDPlayerConfig {

    @Bean
    public SgtPeppers sgtPeppers() {
        return new SgtPeppers();
    }
}

2、借助JavaConfig实现注入

@Configuration
public class CDPlayerConfig {

    @Bean
    public SgtPeppers sgtPeppers() {
        return new SgtPeppers();
    }

    /*
     *JavaConfig实现注入
     */
    @Bean
    public CDPlayer cdPlayer() {
        return new CDPlayer(sgtPeppers());
    }

    /*
     * 推荐方式
     * 需要注入的bean不需要声明在同一个配置类中
     * 实现了DI功能
     *JavaConfig实现注入
     */
    @Bean
    public CDPlayer cdPlayer(CompactDisc compactDisc) {
        return new CDPlayer(compactDisc);
    }
}

3.通过XML配置bean

最为简单的XML配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

1、声明一个简单的bean

<bean id="SgtPeppers" class="com.ql.SgtPeppers"/>

2、借助构造器注入初始化bean

  • <constructor-arg>元素。
  • 使用Spring 3.0 引入的c-命名空间。
<!-- <constructor-arg>元素 -->
<bean id="cdPlayer" class="com.ql.CDPlayer">
    <constructor-arg ref="SgtPeppers"/>
</bean>
<!-- c-命名空间 -->
<bean id="cdPlayer" class="com.ql.cdPlayer.CDPlayer" c:cd-ref="SgtPeppers"/>

以上


文章作者: Qliang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Qliang !
评论
 上一篇
bean的生命周期 bean的生命周期
bean的生命周期 在传统的Java应用中,bean的生命周期很简单。使用new进行bean实例化,然后该bean就可以使用了。一旦该bean不再被使用,则由Java自动进行垃圾回收。 Spring容器中的bean的生命周期就复杂得多。以
2019-03-26
下一篇 
Spring容器 Spring容器
介绍Spring容器并不只有一个,Spring自带了多个容器实现,可以归为两种类型。 bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器提供基本的DI支持。
2019-03-23
  目录