spring之bean管理
文章目录
一、bean是什么?
在软件应用中由Spring管理的所有的对象都称之为Bean,如果使用了spring框架那么我们自己创建的类都需要由Spring管理,首先需要对这个类进行配置。
二、使用步骤
1.基于xml的方式创建bean对象,注入属性
代码如下
首先bean对象的定义如下:
package com.lhh.model;
public class Pig {
private int age;
private String name;
public Pig(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Pig{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
/*通过set方法进行注入age*/
public void setAge(int age) {
this.age = age;
}
/*通过set方法进行注入name*/
public void setName(String name) {
this.name = name;
}
public Pig() {
}
}
<!--创建一个类,class属性定义该类的全限定类名,id用于给类起别名,这个别名用于
测试的时候,拿到该bean对象,然后进行相关的操作。bean标签里面的property标签用于注入属性,也就是给属性中设置值(这里使用的是set方法进行注入,其实还可以使用构造方法进行注入。)
-->
<bean id="pig" class="com.lhh.model.Pig">
<property name="age" value="15"></property>
<property name="name" value="张三"></property>
</bean>
<!--通过构造函数进行属性的注入-->
<bean id="pig" class="com.lhh.model.Pig">
<constructor-arg name="age" value="19"></constructor-arg>
<constructor-arg name="name" value="张三"></constructor-arg>
</bean>
使用bean:
@Test
public void testShuXing() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Pig pig = (Pig) context.getBean("pig");
System.out.println(pig);
}
2.基于xml方式创建bean对象,注入外部bean,注入list,map,set等等
代码如下(示例):
首先定义一个bean
package com.lhh.spring1;
import org.springframework.beans.factory.BeanFactory;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Teacher {
private List<String> list;
private int[]array;
private Map<String,String> stringMap;
private Set<String> stringSet;
private List<User> userList;
private Map<String,User> stringUserMap;
public void setList(List<String> list) {
this.list = list;
}
@Override
public String toString() {
return "Teacher{" +
"list=" + list +
", array=" + Arrays.toString(array) +
", stringMap=" + stringMap +
", stringSet=" + stringSet +
", userList=" + userList +
", stringUserMap=" + stringUserMap +
'}';
}
public void setArray(int[] array) {
this.array = array;
}
public void setStringMap(Map<String, String> stringMap) {
this.stringMap = stringMap;
}
public void setStringSet(Set<String> stringSet) {
this.stringSet = stringSet;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public void setStringUserMap(Map<String, User> stringUserMap) {
this.stringUserMap = stringUserMap;
}
}
对应的核心配置文件中的bean的具体配置如下:
<!--测试数组集合list,map,set的注入,以及list范型对象,和map范型对象的注入-->
<bean id="teacher" class="com.lhh.spring1.Teacher">
<!--注入数组-->
<property name="array">
<array>
<value>12</value>
<value>13</value>
<value>14</value>
<value>15</value>
<value>16</value>
</array>
</property>
<!--注入list集合-->
<property name="list">
<list>
<value>zhangsan</value>
<value>lishi</value>
<value>wangwu</value>
<value>zhaoliu</value>
</list>
</property>
<!--<property name="list" ref="list"></property>-->
<!--注入set-->
<property name="stringSet">
<set>
<value>123</value>
<value>456</value>
<value>789</value>
</set>
</property>
<!--注入map集合-->
<property name="stringMap">
<!--注入了三条数据-->
<map>
<entry key="zhangsan" value="16"></entry>
<entry key="zhaoliu" value="19"></entry>
<entry key="wangwu" value="20"></entry>
</map>
</property>
<!--注入带有对象的list集合-->
<property name="userList">
<list>
<ref bean="user"></ref>
<ref bean="user1"></ref>
</list>
</property>
<!--注入带有对象的map集合的注入-->
<property name="stringUserMap">
<map>
<entry key="zhangsan" value-ref="user"></entry>
<entry key="zhangsan" value-ref="user1"></entry>
</map>
</property>
</bean>
在teacher这个bean当中,里面的属性需要使用这个外部list,那么就直接在内部引用就好了。另外使用这个提取list集合的属性注入,需要导入约束,util
分别为:
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd"
<!--提取list集合的属性注入-->
<util:list id="list">
<list>
<value>123456</value>
<value>456123</value>
<value>156324</value>
</list>
</util:list>
总结
外部bean的注入:
可以使用set方法注入,也可以使用构造注入。只不过在xml文件当中,bean标签里面的property标签使用ref属性引入外部bean
属性注入:
有基本数据类型的注入,也有数组,集合类型的属性注入,再者,可以有对象类型的集合的注入。这个时候,需要使用引用外部的bean对象。