Spring中bean的三种装配机制之一—java configure

来源:互联网 发布:淘宝新店运营计划表 编辑:程序博客网 时间:2024/05/20 09:25

基本介绍

  上一篇博文我们已经讲了怎样使用@ComponentScan和@Autowired实现自动装配,这里将讲解使用java config实现bean装配的方式。之所以还需要使用java config装配,是因为当我们使用第三方库中的组件时,就不能再使用@Component和@Autowired了
  java config是配置代码,一般不应该出现任何业务逻辑,以使得相关人员对其功能不产生混淆。

javaConfig方式进行bean装配:@Bean

  首先声明实体类接口DuFamily及其实现类SonOne和进行依赖注入测试的类FriendOfSon:
  

package com.example.springboot.demo.javaconfigsystem;public interface DuFamily {    void lastName();}
package com.example.springboot.demo.javaconfigsystem;import org.springframework.stereotype.Component;@Component//貌似可以去掉public class SonOne implements DuFamily {    @Override    public void lastName() {        System.out.println("long");    }}
package com.example.springboot.demo.javaconfigsystem;import org.springframework.stereotype.Component;@Component//貌似可以去掉public class FriendOfSon {    private DuFamily duFamily;    public FriendOfSon(DuFamily duFamily) {        this.duFamily = duFamily;    }}

配置类

package com.example.springboot.demo.javaconfigsystem;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class DemoConfig {    /**     * 获取大儿子的bean示例     * fixme:返回值类型就是@Autowired对应的类型名称,用@Bean的话貌似SonOne的@Component注解也没什么用了     */    @Bean    public DuFamily duFamily(){        return new SonOne();    }    /**     * 获取大儿子朋友bean的示例:     *      1.这个bean依赖大儿子的bean,注入依赖的bean有两种中方法:     *            1)调用duFamily方法获取SonOne实例 return new FriendOfSon(duFamily());     *            2)fixme 使用这种方法:构造器注入。也可以setter注入     *///    @Bean//    public FriendOfSon friendOfSon(DuFamily duFamily){//        return new FriendOfSon(duFamily);//    }    /**     * 使用set方法注入     * @param duFamily     * @return     */    @Bean    public FriendOfSon friendOfSon(DuFamily duFamily){        FriendOfSon friendOfSon=new FriendOfSon();        friendOfSon.setDuFamily(duFamily);        return friendOfSon;    }}

测试类

package com.example.springboot.demo.soundsystem;import com.example.springboot.demo.javaconfigsystem.DemoConfig;import com.example.springboot.demo.javaconfigsystem.DuFamily;import com.example.springboot.demo.javaconfigsystem.FriendOfSon;import com.example.springboot.demo.javaconfigsystem.SonOne;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import static org.junit.Assert.assertNotNull;/** * 测试使用java的方式(@Bean)配置bean的装配 * @date 2017/12/11 */@RunWith(SpringJUnit4ClassRunner.class)//测试时创建spring的应用上下文@ContextConfiguration(classes = DemoConfig.class)//从这个类里边找配置信息public class JavaConfigTest {    @Autowired    private DuFamily duFamily;//与返回类型对齐,不是@Component注解的子类    @Autowired    FriendOfSon friendOfSon;    @Test    public void testJavaConfig(){        assertNotNull(friendOfSon);        duFamily.lastName();//调用儿子的方法    }}

git地址:https://github.com/dugenkui03/spring-bean-wiring-demo

原创粉丝点击