一,概述
1)SpringIOC容器是Spring的核心内容.作用:创建对象及处理对象的依赖关系.
2)IOC容器创建对象的方式:
a)调用无参数构造器
b)带参数构造器
c)工厂创建对象:工厂类静态方法创建对象;工厂类非静态方法创建对象.
二,IOC创建对象
1)User实体类
package com.bighuan.b_create_obj;
public class User {
public User(){
System.out.println("------创建user对象[无参构造器]----");
}
public User(int id, String name) {
System.out.println("------创建user对象[有参构造器]----");
this.id = id;
this.name = name;
}
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void init_user(){
System.out.println("在创建user对象后初始化");
}
public void destroy_user(){
System.out.println("IOC容器销毁,user对象回收");
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
2)工厂类
package com.bighuan.b_create_obj;
public class ObjectFactory {
public User getInstance(){
return new User(112,"工厂:通过实例方法");
}
public static User getStaticInstance(){
return new User(113,"工厂:通过静态方法");
}
}
3)配置
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- IOC容器的配置:要创建的所有对象都在这里配置 -->
<!-- ******对象创建********* -->
<!-- 默认无参数构造器 -->
<bean id="user1" class="com.bighuan.b_create_obj.User"></bean>
<!-- 有参构造器 -->
<bean id="user2" class="com.bighuan.b_create_obj.User">
<!-- 基本类型直接写(如int),引用类型写全名(如:java.lang.String) -->
<constructor-arg value="119" index="0" type="int"></constructor-arg>
<constructor-arg value="Leslie" index="1" type="java.lang.String"></constructor-arg>
</bean>
<!-- 定义一个字符串 -->
<bean id="str" class="java.lang.String">
<constructor-arg value="rose"></constructor-arg>
</bean>
<!-- 有参构造器 -->
<bean id="user3" class="com.bighuan.b_create_obj.User">
<!-- 基本类型直接写(如int),引用类型写全名(如:java.lang.String) -->
<constructor-arg value="119" index="0" type="int"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" ref="str"></constructor-arg>
</bean>
<!-- 3,通过工厂创建对象 -->
<!-- 工厂类:实例方法 -->
<bean id="factory" class="com.bighuan.b_create_obj.ObjectFactory"></bean>
<bean id="user4" factory-bean="factory" factory-method="getInstance"></bean>
<!--
工厂类:静态方法
class:指定的就是工厂类
factory-method:指定的就是工厂的静态方法
-->
<bean id="user5" class="com.bighuan.b_create_obj.ObjectFactory" factory-method="getStaticInstance"></bean>
</beans>
4)测试
package com.bighuan.b_create_obj;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class App {
@Test
public void testIOC() throws Exception {
//bean.xml在src目录下
//ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
//创建IOC容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext(
"com/bighuan/b_create_obj/bean.xml");
//获取容器中的对象
User user1=(User) ac.getBean("user1");
User user2=(User) ac.getBean("user2");
User user3=(User) ac.getBean("user3");
User user4=(User) ac.getBean("user4");
User user5=(User) ac.getBean("user5");
System.out.println(user1);
System.out.println(user2);
System.out.println(user3);
System.out.println(user4);
System.out.println(user5);
}
}
测试结果:
------创建user对象[无参构造器]----
------创建user对象[有参构造器]----
------创建user对象[有参构造器]----
------创建user对象[有参构造器]----
------创建user对象[有参构造器]----
User [id=0, name=null]
User [id=119, name=Leslie]
User [id=119, name=rose]
User [id=112, name=工厂:通过实例方法]
User [id=113, name=工厂:通过静态方法]