Spring实战3.4 基于Java的配置

本文深入讲解Spring框架如何利用Java配置替代XML配置,包括创建配置类、声明Bean、使用基于Java的配置进行注入等内容,展示了Spring Java配置的灵活性和优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

3.4.1 创建基于Java的配置

3.4.2 定义一个配置类

3.4.3 声明一个简单的Bean

3.4.4 使用Spring的基于Java的配置进行注入


3.4.1 创建基于Java的配置

Spring中为了减少XML配置,可以声明一个配置类对bean进行配置,主要用到两个注解@Configuration和@bean。

首先,XML中进行少量的配置来启动java配置,spring-idol.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" 
    xmlns:context="http://www.springframework.org/schema/context"   
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
       
    <context:component-scan
    	base-package = "com.springinaction.springidol"/>
    	
</bean>

3.4.2 定义一个配置类

用@Configuration注解该类,等价于XML里的<beans>,用@Bean注解方法,等价于XML配置的<bean>,方法名等于Bean ID。代码如下:

package com.springinaction.springidol;

import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringIdolConfig {
	
	//Bean declaration methods go here
}

 @Configuration注解会作为一个标识告诉Spring:这个类将包含一个或多个Spring Bean的定义。这些Bean的定义是使用@Bean注解所标注的方法。

3.4.3 声明一个简单的Bean

用@Bean注解标注一个方法来定义duke Bean:

package com.springinaction.springidol;

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

@Configuration
public class SpringIdolConfig {
	
	@Bean
	public Performer duke(){
		return new Juggler();
	}
}

这就是java配置,等价于之前使用XML所配置的<bean>元素。@Bean告知Spring这个方法将返回一个对象,该对象应该被注册为Spring应用上下文中的一个Bean。方法名作为该Bean的ID。

Spring的Java配置中想对于XML配置有一个优点。在XML配置 中,Bean 的类型和ID都是由String属性来标识的。String标识符的缺点是它们无法进行编译期检查。如果重新命名了Juggler类,或许会忘记修改相对应的XML配置。

在Spring的java配置中,美哟String属性。Bean的ID和类型都被视为方法签名的一部分。Bean的实际创建是在方法体中定义的。因为它们全是java代码,所以可以进行编译期检查来确保Bean的类型都是合法类型,并且Bean的ID是唯一的。

3.4.4 使用Spring的基于Java的配置进行注入

为Bean注入一个值,使用基于Java的配置,只需要把数字直接传入构造器中:

@Bean
public Performer duke15(){
	return new Juggler(15);
}

 Setter注入也是自然的java代码:

@Bean
public Performer kenny(){
	Instrumentalist kenny = new Instrumentalist();
	kenny.setSong("Jingle Bells");
	return kenny;
}

Bean装配另一个Bean的引用。首先用Java声明一个sonnet29 Bean

@Bean
private Poem sonnet29(){
	return new Sonnet29();
}

之后创建一个PoeticJuggler Bean,通过构造器为它装配sonnet29 Bean:

@Bean
public Performer poeticJuggler(){
	return new PoeticJuggler(sonnet29());
}

在Spring的java配置中,通过声明方法引用一个Bean并不等同与调用该方法,如果真的这样,每次调用sonnet29(),都将得到该Bean的一个新的实例。Spring要比这聪明多了。

通过使用@Bean注解标注sonnet29()方法,会告知Spring我们希望该方法定义的Bean‘要被注册进Spring的应用上下文中。因此,在其他Bean的声明方法中引用这个方法时,Spring都会拦截该方法的调用,并尝试在应用上下文中查找该Bean,而不是让方法创建一个新的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值