Spring Bean三种配置方式

本文介绍了Spring框架中Bean的三种配置方式:传统的XML文件配置,基于Java注解的XML配置(自动配置)以及完全使用Java类配置。详细解析了XML配置的命名空间,注解配置的@Component、@Service、@Repository和@Controller等,并讨论了Java类配置的优势和常用注解。

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

普通的XML文件配置

对于xml配置,在Spring 2.0以后使用了Schema格式,使不同类型的配置文件都有了自己的命名空间,使得xml配置更加具有扩展性。
默认的命名空间:没有空间名,用于Spring Bean的定义。
xsi命名空间:用于为每个文档中命名空间指定相应的Schema格式文件。是W3定义的标准命名空间。
aop命名空间:是Spring配置AOP的命名空间,是用户自定义的。

applicationContext.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">
 
	<bean class="com.fzxey.ioc.pojo.UserBean" id="userId" />
</beans>
UserBean.java
package com.fzxey.ioc.pojo;

public class UserBean {
	public UserBean() {
	}
	public void say() {
		System.out.println("基于xml配置的bean");
	}
}

SpringTest.java
package com.fzxey.ioc;


import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.fzxey.ioc.pojo.UserBean;

public class SpringTest {

	@Test
	public void test() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
		UserBean user = (UserBean) ac.getBean("userId");
		user.say();
	}

}


基于Java注解的XML配置(自动配置)

自动配置也叫自动注入,自动配置来简化Bean的配置。有如下几个注解来实现:
@Component : 一般用于身份不明确的组件上。
@Service : 一般用于Service层上。
@Controller : 一般用于Controller层上。
@Repository : 一般用于数据访问层(DAO层)。

applicationContext.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-4.3.xsd">   
	
	<context:component-scan base-package="com.fzxey.ioc" />
</beans>

xmlns:context="http://www.springframework.org/schema/context"

需要加载Context模块的Schema文件,

<context:component-scan base-package="com.fzxey.ioc" />作用是自动扫描base-package包下的注解。

Userbean.java
package com.fzxey.ioc.pojo;

import org.springframework.stereotype.Component;

@Component
public class UserBean {
	public UserBean() {
	}
	public void say() {
		System.out.println("基于Java注解的bean");
	}
}

SpringTest.java
package com.fzxey.ioc;


import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.fzxey.ioc.pojo.UserBean;

public class SpringTest {

	@Test
	public void test() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
		UserBean user = (UserBean) ac.getBean("userBean");
		user.say();
	}

}


基于Java类配置

在SpringBoot 流行后,用Java类配置Bean被广泛使用。本质上就是用一个Java类取代xml配置。Spring3.0基于java的配置直接支持下面的注解:@Configuration, @Bean, @DependsOn, @Primary, @Lazy, @Import, @ImportResource, @Value

JavaConfig.java
package com.fzxey.ioc.config;

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

import com.fzxey.ioc.pojo.UserBean;
/**
 * Java配置文件
 * @Configuration 让当前类和applicationContext.xml作用等价
 * @author fzxey
 *
 */
@Configuration
public class JavaConfig {
	
	/**
	 * @Bean 的作用和<bean>的作用是一样的
	 * id name 默认是和方法名相同的
	 * @return
	 */
	@Bean
	public UserBean getUB() {
		UserBean ub = new UserBean();
		return ub;
		
	}
}
UserBean.java
package com.fzxey.ioc.pojo;


public class UserBean {
	public UserBean() {
	}
	public void say() {
		System.out.println("基于类的JavaConfig的bean");
	}
}
SpringTest.java
package com.fzxey.ioc;


import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.fzxey.ioc.config.JavaConfig;
import com.fzxey.ioc.pojo.UserBean;

public class SpringTest {

	@Test
	public void test() {
		ApplicationContext ac = new AnnotationConfigApplicationContext(JavaConfig.class);
		UserBean user = (UserBean) ac.getBean(UserBean.class);
		user.say();
	}

}

@Fzxey

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值