7.6 Spring 3.0 提供的Java配置管理

      Spring 允许使用Java类进行配置管理,可以不使用XML来管理Bean,以及Bean之间的依赖关系。

      Interface :Person

package edu.pri.lime._7_6.bean;public interface Person {void userAxe();}

      Interface : Axe

package edu.pri.lime._7_6.bean;public interface Axe {String chop();
}

      Class : Chinese

package edu.pri.lime._7_6.bean.impl;import edu.pri.lime._7_6.bean.Axe;
import edu.pri.lime._7_6.bean.Person;public class Chinese implements Person {private Axe axe;private String name;public Axe getAxe() {return axe;}public void setAxe(Axe axe) {this.axe = axe;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void userAxe() {System.out.println("我是:" + name + "," + axe.chop());}
}

      Class : StoneAxe

package edu.pri.lime._7_6.bean.impl;import edu.pri.lime._7_6.bean.Axe;public class StoneAxe implements Axe {public String chop() {return "石斧砍柴真慢";}}

      Class : SteelAxe

package edu.pri.lime._7_6.bean.impl;import edu.pri.lime._7_6.bean.Axe;public class SteelAxe implements Axe {public String chop() {return "钢斧砍柴真快";}}

      Class : AppConfig

package edu.pri.lime._7_6.bean.configuration;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import edu.pri.lime._7_6.bean.Axe;
import edu.pri.lime._7_6.bean.Person;
import edu.pri.lime._7_6.bean.impl.Chinese;
import edu.pri.lime._7_6.bean.impl.SteelAxe;
import edu.pri.lime._7_6.bean.impl.StoneAxe;//指定类为配置类
@Configuration
public class AppConfig {//    相当于定义一个名为personName的变量,其值为“lime”@Value("lime")String personName;
//    配置Bean : stoneAxe@Bean(name="stoneAxe")public Axe stoneAxe(){return new StoneAxe();}
//    配置Bean : steelAxe@Bean(name="steelAxe")public Axe steelAxe(){return new SteelAxe();}
//    配置一个Bean:chinese@Bean(name="chinese")public Person chinese(){Chinese person = new Chinese();person.setName(personName);person.setAxe(steelAxe());return person;}
}

      Class :BeanTest

package edu.pri.lime._7_6.main;import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;import edu.pri.lime._7_6.bean.Person;
import edu.pri.lime._7_6.bean.configuration.AppConfig;
import edu.pri.lime._7_6.bean.impl.Chinese;public class BeanTest {public static void main(String[] args){//使用Java配置类管理Spring容器中的Bean及其依赖关系时,使用AnnotationConfigApplication创建容器ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);Person chinese = ctx.getBean("chinese",Chinese.class);chinese.userAxe();}
}

      @Configuration : 用于修饰一个Java配置类

      @Bean : 用于修饰一个方法,将该方法的返回值定义成容器中的一个Bean。

      @Value : 用于修饰以恶搞Field,用于为该Field配置一个值,相当于配置一个变量。

      @Import : 修饰一个Java配置类,用于向当前Java配置类中导入其他Java配置类。

      @Scope : 用于修饰一个方法,指定该方法对应的Bean的生命域。

      @Lazy : 用于修饰一个方法,指定该方法对应的Bean是否需要延迟初始化。

      @DependsOn : 用于修饰一个方法,指定在初始化该方法对应的Bean之前初始化指定的Bean。

      在实际项目中可能会混合使用XML配置和Java类配置混合使用:

      ⊙ 如果以XML配置为主,就需要让XMLpehiz能加载Java类配置。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"><!-- 加载Java配置类 --><bean class="edu.pri.lime._7_6.bean.configuration.AppConfig" />
</beans>

        由于以XML配置为主,因此应用创建Spring容器时,还是以XML配置文件为参数来创建ApplicationContext对象。那么Spring会先加载XML配置文件,在根据XML配置文件的指示去加载指定的Java配置类。

      ⊙ 如果以Java类配置为主,就需要让Java配置类能加载XML配置。在配置类上增加@ImportResource注解,修饰Java配置类,用于导入指定的XML配置文件。

package edu.pri.lime._7_6.bean.configuration;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;import edu.pri.lime._7_6.bean.Axe;
import edu.pri.lime._7_6.bean.Person;
import edu.pri.lime._7_6.bean.impl.Chinese;
import edu.pri.lime._7_6.bean.impl.SteelAxe;
import edu.pri.lime._7_6.bean.impl.StoneAxe;//指定类为配置类
@Configuration
@ImportResource(value = { "classpath:app_7_6.xml" })
public class AppConfig {//    相当于定义一个名为personName的变量,其值为“lime”@Value("lime")String personName;
//    配置Bean : stoneAxe@Bean(name="stoneAxe")public Axe stoneAxe(){return new StoneAxe();}
//    配置Bean : steelAxe@Bean(name="steelAxe")public Axe steelAxe(){return new SteelAxe();}
//    配置一个Bean:chinese@Bean(name="chinese")public Person chinese(){Chinese person = new Chinese();person.setName(personName);person.setAxe(steelAxe());return person;}
}

      由于以Java类配置为主,因此应用创建Spring容器时,应以Java配置类为参数,通过创建AnnotationConfigApplicationContext对象作为Spring容器。那么Spring会先加载Java配置类,在根据Java配置类的指示去加载指定的XML配置文件。

7 -- Spring的基本用法 -- 6... Spring 3.0 提供的Java配置管理相关推荐

  1. Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例

    Spring 异步@Async注解用法 Spring @Async注解用法总结 Spring @Async基本用法示例 一.概述 在日常开发的工作中,经常会使用异步进行开发.Spring 提供一个简单 ...

  2. Spring基本用法1——Spring的核心机制:IOC、DI

            前言:一直想写一个关于Spring的系列文章,但是构思许久却不知道以什么方式阐述,毕竟要把一个复杂框架说清楚并不是那么容易的,我也只能尽力而为了.Spring系列文章打算以这样的顺序展 ...

  3. 【Spring注解系列11】Spring后置处理器BeanPostProcessor用法与原理

    1.BeanPostProcessor原理 先说,bean的后置处理器BeanPostProcessor接口中两个方法: postProcessBeforeInitialization:在初始化之前工 ...

  4. 【Spring学习】spring依赖注入用法总结

    顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.Controller.Repository.Componen ...

  5. 补习系列(22)-全面解读 Spring Profile 的用法

    目录 一.简介 二. 区分Bean对象 三. 设置Profile 3.1 WebApplicationInitializer接口 3.2 通过 web.xml定义 3.3 JVM启动参数 3.4 环境 ...

  6. Spring的基础用法

    前言 上面的目录内容本文章不一定都会写到,本次的文章将非常简略,主写主要内容,次要内容需要读者有一定的学习基础才可以看懂以及掌握,本文章比较偏向于理论复习,注意是理论,本文章代码不多,代码比较多的是高 ...

  7. Spring Data JPA用法详解

    Spring Data JPA: JPA(Java Persistence API)即java持久化API,它的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate.TopLink. ...

  8. Spring核心技术(七)——Spring容器的扩展

    本文将讨论如何关于在Spring生命周期中扩展Spring中的Bean功能. 容器的扩展 通常来说,开发者不需要通过继承ApplicationContext来实现自己的子类扩展功能.但是Spring ...

  9. java spring hiberate_Java程序员:Spring Boot和Hibernate一起使用的技巧

    Hibernate不需要多介绍,它是Java中最受欢迎的ORM.同样,Spring Boot是功能最强大且易于使用的框架.本文并不是描述一些关于Hibernate或Spring Boot的用法,因为有 ...

最新文章

  1. 工作中涉及运维知识点的汇总
  2. STM32程序设计心得以及易错点
  3. 算法与数据结构(快速排序)
  4. 菜单之一:Menu基础内容
  5. linux网卡固件名,修改CentOS7网卡名称为传统名称eth0格式
  6. centos-7.2 node.js免编译安装
  7. mysql存储过程in_在MySQL存储过程中使用WHERE IN()
  8. 淘宝推荐系统简介分享总结
  9. 漫画:女生/男生告白攻略
  10. Python3学习笔记18-访问限制
  11. 火车进出栈【卡特兰数】【高精度】【压位】【压int位】
  12. Java的JVM,GC是什么?
  13. 便便教你玩转流程引擎Snaker
  14. 指数的增长和衰退问题
  15. 数据迁移工具之DataX
  16. redis资源未释放引发的问题
  17. r5 5600u和锐龙r5 4500u的区别
  18. 目标检测后处理:从nms到softer nms
  19. Xcode 官方下载地址 https://developer.apple.com/downloads/
  20. kafka的启动命令

热门文章

  1. mysql select 进阶_MySQL进阶_SELECT篇(一)
  2. centos 安装mysql5.6.12_CentOS6.4+MySQL-5.6.12 安装详解
  3. flask向html传函数,Flask----函数数据类型传参
  4. 执行环境及作用域分析
  5. 深入理解基本包装类型
  6. 阴阳师服务器维修拖延,阴阳师12月11日更新维护公告 阴阳师百闻牌联动开启
  7. 80c51汇编语言指令格式中的非必须,求单片机答案
  8. python中的super用法详解_Python中super的用法实例
  9. 硬币兑换python 每个面值有多个_【算法27】硬币面值组合问题
  10. docker实践第二版pdf 网盘_【漫画】什么是 docker?docker 应用场景解析