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
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:通过构造方法中还有很多属性可以设置。可以参考官方文档。
index:通过下标设置
name:通过名称设置
type:通过参数类型设置 String int等
<constructor-arg type="String">
<value>String</value>
</constructor-arg>
ref 是引用类型,value 是用来设置值。