Spring中的Bean配置 (1)——内容提要
Spring中的Bean配置 (2)—— IOC和DI
Spring中的Bean配置 (3)——在Spring的IOC容器里配置Bean(通过全类名(反射))——基于XML文件的方式
Spring中的Bean配置 (4)——依赖注入方式
Spring中的Bean配置 (5)——字面值
Spring中的Bean配置 (6)——引用其他Bean
Spring中的Bean配置 (7)——注入参数详解:null值和级联属性
Spring中的Bean配置 (8)—— 集合属性
Spring中的Bean配置 (9)—— XML 配置里的 Bean自动装配
Spring中的Bean配置 (10)—— 继承 Bean 配置和依赖 Bean 配置
Spring中的Bean配置 (11)——Bean的作用域
Spring中的Bean配置 (12)——使用外部属性文件
Spring中的Bean配置 (13)—— Spring表达式语言:SpEl
Spring中的Bean配置 (14)——IOC容器中Bean的生命周期
Spring中的Bean配置 (15)——在Spring的IOC容器里配置Bean(通过工厂方法创建Bean)——基于XML文件的方式
Spring中的Bean配置 (16)——在Spring的IOC容器里配置Bean(通过FactoryBean)——基于XML文件的方式
Spring中的Bean配置 (17)——在Spring的IOC容器里配置Bean——基于注解的方式来配置Bean
1: list, set 标签
- 在 Spring中可以通过一组内置的 xml 标签(例如: list, set 或map) 来配置集合属性.
- 配置 java.util.List 类型的属性, 需要指定 list 标签, 在标签里包含一些元素. 这些标签可以通过 value指定简单的常量值, 通过 ref 指定对其他 Bean 的引用. 通过bean 指定内置 Bean 定义. 通过 null标签 指定空元素. 甚至可以内嵌其他集合.
- 数组的定义和 List 一样, 都使用 list
- 配置 java.util.Set 需要使用 set 标签, 定义元素的方法与 List 一样.
:2: map标签
- Java.util.Map 通过 map 标签定义, map 标签里可以使用多个 entry 作为子标签. 每个条目包含一个键和一个值.
- 必须在 key 标签里定义键
- 因为键和值的类型没有限制, 所以可以自由地为它们指定 value ,ref, bean 或 null 元素.
- 可以将 Map 的键和值作为 entry 的属性定义: 简单常量使用 key 和 value 来定义; Bean 引用通过 key-ref 和 value-ref 属性定义
- 使用 prop> 定义 java.util.Properties, 该标签使用多个 prop 作为子标签. 每个 prop 标签必须定义 key 属性.
:3:使用 utility scheme 定义集合
- 使用基本的集合标签定义集合时, 不能将集合作为独立的Bean定义 ,导致其*它Bean 无法引用该集合, 所以无法在不同Bean之间共享集合.
然而可以使用 util schema 里的集合标签定义独立的集合 Bean. 需要注意的是, 必须在 beans 根元素里添加 util schema 定义
:4: 使用 p 命名空间
- 为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。
- Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 bean 元素属性的方式配置 Bean 的属性。
- 使用 p 命名空间后,基于 XML 的配置方式将进一步简化
以下将对上面四个类型标签一一演示,注意配置.xml文件时要引入如下的namespace
list标签代码示例(set标签不做演示):
Car.java
package com.atguigu.spring.beans;
import com.atguigu.spring.beans.Person;
public class Car {
private String carName;
private int price;
private java.util.List<Person> person;
public void setCarName(String carName) {
this.carName = carName;
}
public void setPrice(int price) {
this.price = price;
}
public void setPerson(java.util.List<Person> person) {
this.person = person;
}
@Override
public String toString() {
return "Car [carName=" + carName + ", price=" + price + ", person=" + person + "]";
}
}
NewCar.java
package com.atguigu.spring.beans;
public class NewCar {
private String carName;
private int price;
private java.util.Map<String,Car> person;
public void setCarName(String carName) {
this.carName = carName;
}
public void setPrice(int price) {
this.price = price;
}
public void setPerson(java.util.Map<String, Car> person) {
this.person = person;
}
@Override
public String toString() {
return "NewCar [carName=" + carName + ", price=" + price + ", person=" + person + "]";
}
}
Person.java
package com.atguigu.spring.beans;
public class Person {
private String userName;
private String number;
private String place;
public void setUserName(String userName) {
this.userName = userName;
}
public void setNumber(String number) {
this.number = number;
}
public void setPlace(String place) {
this.place = place;
}
public Person(String userName, String number, String place) {
super();
this.userName = userName;
this.number = number;
this.place = place;
}
public Person() {
}
@Override
public String toString() {
return "Person [userName=" + userName + ", number=" + number + ", place=" + place + "]";
}
}
application.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:lang="http://www.springframework.org/schema/lang"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="person1" class="com.atguigu.spring.beans.Person">
<constructor-arg value="zlj" type="java.lang.String"></constructor-arg>
<constructor-arg value="123456" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<bean id="person2" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hl" type="java.lang.String"></constructor-arg>
<constructor-arg value="12345" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<bean id="person3" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hll" type="java.lang.String"></constructor-arg>
<constructor-arg value="1234567" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<!-- 测试list标签 -->
<bean id="car1" class="com.atguigu.spring.beans.Car">
<property name="carName" value="benci"></property>
<property name="price" value="1000000"></property>
<property name="person" >
<list>
<ref bean="person1"/>
<ref bean="person2"/>
<ref bean="person3"/>
</list>
</property>
</bean>
</beans>
如下是主函数运行文件
Main.java
package com.atguigu.spring.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
Car car1=(Car)applicationContext.getBean("car1");
System.out.println(car1);
}
}
map标签代码演示(小编把这些标签都放在了相同三个类中做演示所以只是application.xml和Main.java(主函数)不同,所以下面只演示了不同标签使用情况下的不同的application.xml和Main.java(主函数))
xml配置文件
application.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:lang="http://www.springframework.org/schema/lang"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="person1" class="com.atguigu.spring.beans.Person">
<constructor-arg value="zlj" type="java.lang.String"></constructor-arg>
<constructor-arg value="123456" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<bean id="person2" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hl" type="java.lang.String"></constructor-arg>
<constructor-arg value="12345" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<!-- 测试map标签 -->
<bean id="car2" class="com.atguigu.spring.beans.NewCar">
<property name="carName" value="benci"></property>
<property name="price" value="1000000"></property>
<property name="person">
<map>
<entry key="aa" value-ref="person1"></entry>
<entry key="bb" value-ref="person2"></entry>
</map>
</property>
</bean>
</beans>
主函数文件
Main.java
package com.atguigu.spring.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
Car car2=(Car)applicationContext.getBean("car2");
System.out.println(car2);
}
}
utility标签演示(小编把这些标签都放在了相同三个类中做演示所以只是application.xml和Main.java(主函数)不同,所以下面只演示了不同标签使用情况下的不同的application.xml和Main.java(主函数))
xml配置文件
application.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:lang="http://www.springframework.org/schema/lang"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<bean id="person1" class="com.atguigu.spring.beans.Person">
<constructor-arg value="zlj" type="java.lang.String"></constructor-arg>
<constructor-arg value="123456" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<bean id="person2" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hl" type="java.lang.String"></constructor-arg>
<constructor-arg value="12345" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<bean id="person3" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hll" type="java.lang.String"></constructor-arg>
<constructor-arg value="1234567" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>
<!-- 测试配置单例的集合Bean,以供给多个bean进行引用,需要导入util命名空间 -->
<util:list id="person4">
<ref bean="person1"/>
<ref bean="person2"/>
<ref bean="person3"/>
</util:list>
<bean id="car3" class="com.atguigu.spring.beans.Car">
<property name="carName" value="benci"></property>
<property name="price" value="1000000"></property>
<property name="person" ref="person4">
</property>
</bean>
</beans>
主函数代码文件
Main.java
package com.atguigu.spring.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
Car car3=(Car)applicationContext.getBean("car3");
System.out.println(car3);
}
}
p标签代码演示(小编把这些标签都放在了相同三个类中做演示所以只是application.xml和Main.java(主函数)不同,所以下面只演示了不同标签使用情况下的不同的application.xml和Main.java(主函数))
xml配置文件
application.java
<?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:lang="http://www.springframework.org/schema/lang"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
<!-- 测试使用p命名 -->
<bean id="person5" class="com.atguigu.spring.beans.Person"
p:number="1233" p:userName="zlj"
></bean>
</beans>
主函数文件
Main.java
package com.atguigu.spring.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
Person person5=(Person) applicationContext.getBean("person5");
System.out.println(person5);
}
}