Spring之IOC容器

一,概述

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=工厂:通过静态方法]


猜你喜欢

转载自blog.csdn.net/bighuan/article/details/71181743