Spring Bean

Spring IOC容器相当于一个工厂,容器中的 Bean 相当工厂的产品。工厂要生产和管理 Bean,需要让工厂知道加载那些Bean,如何加载。

Spring 配置文件支持两种不同的格式,分别是 XML 文件格式和 Properties 文件格式。

一般Spring 以 XML 文件格式作为 Spring 的配置文件,通过 XML 配置文件注册并管理 Bean 之间的依赖关系。

Beans.xml 头配置

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean></bean>
</beans>

bean标签常用属性

属性

描述

id

Bean 的唯一标识符,Spring 容器对 Bean 的配置和管理都通过该属性完成

name

Spring 容器同样可以通过此属性对容器中的 Bean 进行配置和管理,name 属性中可以为 Bean 指定多个名称,每个名称之间用逗号或分号隔开

class

指定了 Bean 的具体实现类

scope

Bean 实例的作用域, singleton(默认单例)、prototype(原型)、request、session 和 global Session

属性

描述 bean元素的子元素

constructor-arg

此元素传入构造参数进行实例化, index 属性指定构造参数的序号(从 0 开始),type 属性指定构造参数的类型

property

调用 Bean 实例中的 Set 方法完成属性赋值,元素的 name 属性指定 Bean 实例中的相应属性名

属性

描述 property constructor-arg等元素的子元索

ref

property 和 constructor-arg 元素的子元索,ref元素中的 bean 属性用于指定对 Bean 工厂中某个 Bean 实例的引用

value

property 和 constructor-arg 元素的子元索,用于直接指定一个常量值

属性

描述

list

用于封装 List 或数组类型的依赖注入

set

用于封装 Set 类型属性的依赖注入

map

用于封装 Map 类型属性的依赖注入

entry

map元素的子元素,用于设置一个键值对。其 key 属性指定字符串类型的键值,ref 或 value 子元素指定其值

bean的实例化 bean标签用例

1:加载user,通过默认无参的构造方法加载user

spring基于xml注入bean spring bean.xml_xml


User类

public class User {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

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.xsd">
   <!-- bean就是java对象  由spring来创建和管理 -->    
   <bean id="user" class="cn.lingyiwin.bean.User"/>
</beans>

TestUser类

public class TestUser {
	public static void main(String[] args) {
		ApplicationContext act =new ClassPathXmlApplicationContext("config/spring.xml");
		User user = (User)act.getBean("user");
		System.out.println(user);
	}
}

执行结果:说明User对象已经被Spring

cn.lingyiwin.bean.User@2b98378d

上面示例如果没有看明白,我将默认的构造方法打一行带吗?
修改User类

public class User {
	private String name;
	public User() {
		System.out.println("user对象被创建");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

执行结果:

user对象被创建
cn.lingyiwin.bean.User@2b98378d

2:通过property 为user的那么属性设置值。并打印输出

必须有该属性的set方法。

<bean id="user" class="cn.lingyiwin.bean.User">
   	<property name="name" value="设置name的值"/>
</bean>

执行结果:

user对象被创建
cn.lingyiwin.bean.User@56ac3a89
设置name的值

3:通过有参的构造函数加载user对象

user对象

public class User {
	private String name;
	
	public User(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}

修改xml

<bean id="user" class="cn.lingyiwin.bean.User">
   	<constructor-arg name="name" value="有参构造方法"/>
   </bean>

执行结果:

cn.lingyiwin.bean.User@5cb9f472
有参构造方法

4:通过构造方法中还有很多属性可以设置。可以参考官方文档。

spring基于xml注入bean spring bean.xml_User_02


index:通过下标设置

name:通过名称设置

type:通过参数类型设置 String int等

<constructor-arg type="String">
   		<value>String</value>
   	</constructor-arg>

ref 是引用类型,value 是用来设置值。