第13讲_使用 Java 配置进行 Spring bean 管理

2017-12-22  本文已影响21人  吴国友

Spring框架除了基于XML配置方式以为,还有一种使用 Java 配置进行 Spring bean 管理,这种方式也非常好。大家可以好好学习一下

为什么这篇文章是一个补充,因为内容来之 IBM Developerworks 社区的一篇文章。 我们这里是转载对方的内容,值得去分享与尊敬 ,转载地址:https://www.ibm.com/developerworks/cn/webservices/ws-springjava/

本文章内容有 很多地方来自上面转载的地址,同时我们也加入一些自己内容,望大家能够包容和理解,谢谢

  1. 概述

众所周知,Spring 框架是控制反转 (IOC) 或依赖性注入 (DI) 模式的推动因素,而这种推动是通过基于容器的配置实现的。过去,Spring 允许开发人员使用基于 XML 的配置,通过利用应用程序上下文 XML 文件来管理 bean 依赖性。尽管使用 XML 配置较为简单和便捷,但仍有另外一种方法可定义 bean 及其依赖项。这种方法也称为基于 Java 的配置。不同于 XML,基于 Java 的配置使您能够以编程方式管理 bean。这可通过运用多种注释来实现

使用Java配置进行Spring Bean管理的基本用法

  1. 根据IBM Developerworks社区这篇文章案例来介绍

我们将使用一所在线大学的 “创建课程” 用例。在创建课程的过程中,还会创建主题或者模块,而各主题可能又有着不同的作业。因此,我们要创建三个 bean,分别为 Course、Module 和 Assignment。Course bean 将包含一个对 Module bean 的引用,后者包含对 Assignment bean 的引用

package com.gxa.spring.day13;

public class Course {
    private Module module; //依赖对象
    
    public void setModule(Module module) {
        this.module = module;
    }
    
    public void showModuleHashCode() {
        System.out.println("Course HashCode : " + this.hashCode());
        module.showAssignmentHashCode();
    }
}
package com.gxa.spring.day13;

public class Module {
    private Assignment assignment; //依赖对象
    
    public void setAssignment(Assignment assignment) {
        this.assignment = assignment;
    }
    
    public void showAssignmentHashCode() {
        System.out.println("Module HashCode : " + this.hashCode());
        System.out.println("Assignment HashCode : " + assignment.hashCode());
    }
}
package com.gxa.spring.day13;

public class Assignment {

}
<beans>
    <bean id="course" class="demo.Course">
        <property name="module" ref="module"/>
      </bean>
    
    <bean id="module" class="demo.Module">
        <property name="assignment" ref="assignment"/>
      </bean>
    
    <bean id="assignment" class="demo.Assignment" />
</beans>
@Configuration
public class AppContext {
    @Bean
    public Course course() {
        Course course = new Course();
        course.setModule(module());
        return course;
    }

    @Bean
    public Module module() {
        Module module = new Module();
        module.setAssignment(assignment());
        return module;
    }

    @Bean
    public Assignment assignment() {
        return new Assignment();
    }
}

注意:上面代码的@Bean注解是放在方法上的,那么bean id的名称与方法名称一致。

package com.gxa.spring.day13;

import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestAppContext {
    
    @Test
    public void m01() {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class);
        Course course = ctx.getBean(Course.class);
        course.showModuleHashCode();
    }
}
上一篇下一篇

猜你喜欢

热点阅读