[Spring实战系列]配置Spring IOC容器的Bean
Posted SunnyYoona
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Spring实战系列]配置Spring IOC容器的Bean相关的知识,希望对你有一定的参考价值。
1. 简介
Spring提供了一个强大的IOC容器来管理组成应用的bean。为了利用容器服务,必须配置运行于Spring IOC容器中的Bean。
2. 解决方案
你可以通过XML文件,属性文件,注释甚至API来设置Spring IOC容器中的Bean。
Spring允许你在一个或者多个bean配置文件中配置bean。对于简单的应用程序,可以在单个配置文件中集中配置bean。但是对于有许多bean的大型应用,你应该根据其功能将其分割到多个配置文件中。
3. 创建Spring配置
正如前面所讲的,Spring是一个基于容器的框架。如果没有配置Spring,那它就是一个空容器,对于我们也毫无用处。所以我们需要配置Spring 来告诉容器它需要加载哪些Bean和如何装配这些Bean,这样才能确保它们能够彼此协作。
从Spring 3.0 开始,Spring 容器提供了两种配置Bean 的方式。传统上,Spring 使用一个或多个XML 文件作为配置文件,而Spring 3.0 还同时提供了基于Java注解的配置方式。在这里我们首先使用传统的XML文件配置方式,后面我们会改用注解的配置方式。
在XML文件中声明Bean时,Spring 配置文件的根元素是来源于Spring beans 命名空间所定义的<beans> 元素。以下为一个典型的Spring 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-3.0.xsd">
<!-- Bean declarations go here -->
</beans>
在<beans> 元素内,你可以放置所有的Spring 配置信息,包括<bean> 元素的声明。但是beans 命名空间并不是你遇到的唯一的Spring 命名空间。Spring的核心框架自带了10 个命名空间配置,如下表:
命名空间 | 描述 |
AOP | 为声明切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素。 |
beans | 支持声明Bean和装配Bean,是Spring最核心也是最原始的命名空间。 |
context | 为配置Spring应用上下文提供了配置元素,包括自动检测和自动装配Bean,注入非Spring直接管理的对象。 |
jee | 提供了与Java EE API的集成,例如JNDI和EJB。 |
jms | 为声明消息驱动的POJO提供了配置元素。 |
lang | 支持配置由Groovy,JRuby或BeanShell等脚本实现的Bean。 |
mvc | 启用Spring MVC的能力,例如面向切面注解的控制器,试图控制器和拦截器。 |
oxm | 支持Spring的对象到XML映射配置。 |
tx | 提供声明式事务配置。 |
util | 提供各种各样的工具类元素,包括把集成配置为Bean,支持属性占位符元素。 |
在这里我们主要学习的是为bean配置,其他有机会在学习。
4. 声明Bean
package com.sjf.bean;
/**
* 学生实体类
* @author sjf0115
*
*/
public class Student {
private String name;
private int age;
private boolean sex;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(boolean sex) {
this.sex = sex;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("name:" + name + "\n");
builder.append("age:" + age + "\n");
builder.append("sex:" + (sex ? "boy" : "girl") + "\n");
return builder.toString();
}
}
正如你所看,我们实现了一个学生实体类Student,为其提供了姓名,年龄和性别属性。我们可以通过set方法为其属性设置值。既然定义了Student类,那就有请我们第一位学生Yoona。Yoona被定义为一个Spring Bean,并在配置文件(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 id = "yoona" class = "com.sjf.bean.Student">
<property name="name" value="yoona"/>
<property name="age" value="24"/>
<property name="sex" value="true"/>
</bean>
</beans>
<bean> 元素是Spring 中最基本的配置单元,通过该元素Spring 将创建一个对象。这里创建了一个由Spring 容器管理的名字为yoona 的Bean。这有可能是最简单的<bean> 配置方式。id 属性定义了Bean 的名字,也作为该Bean 在Spring 容器中的引用。这个Bean 被称为yoona。你还可以根据class 属性得知,yoona是一个Student。对于简单类型的每个bean属性,可以指定一个<value>元素。Spring会试图将你指定的值转换为该属性的声明类型。为了通过设置方法注入配置一个属性,可以使用<property>元素,并在其name特性中指定属性名称。每个<property>要求bean包含对应的一个设置方法。
为了打印Student的详细信息,可以使用如下代码加载Spring应用上下文:
// 1.创建Spring IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2. 从IOC容器中获取Bean实例
Student stu = (Student)context.getBean("yoona");
// 3.调用toString方法
System.out.println(stu.toString());
以上是关于[Spring实战系列]配置Spring IOC容器的Bean的主要内容,如果未能解决你的问题,请参考以下文章
Spring实战系列-BeanPostProcessor的妙用