IOC容器简介
什么是容器?
在java里的类,在Spring中都被称作Bean,容器是用来读取Bean的定义、管理对象的初始化和生产、以及对象之间的依赖关系。同时容器是用来装载对象,描述对象之间的关系。
IOC容器主要由BeanFactory、ApplicationContext两个接口实现。实际开发中,用后者比较多。AppliacationContext继承BeanFactory接口。它除了有BeanFactory的功能之外,还有如下功能:
- 资源访问
- 对国际化的支持
- 对时间的支持
BeanFactory的常用方法:
- ObjectgetBean(String name):根据Bean标识获得Bean实例(常用)
- ObjectgetBean(String name , ClassrequiredType):根据Bean标识获得Bean实例,并转换为指定的类型
- boolean containsBean(String name):判断当前BeanFactory中是否包含该Bean
- boolean isSingleton(String name):判断当前的Bean的scope是否是singleton
- ClassgetTyoe(String name):获得当前Bean的类型
- String[] getAliases(String name):获得当前bean的别名
BeanFactory的实现类
beanFactory的实现类有很多最常用的是—xmlBeanFactory
BeanFactory的实例化
1 Resource resource = new FileSystemResource("bean.xml"); 2 3 BeanFactory factory = new XmlBeanFactory(resource); 4 5 ClassPathResource resource = new ClassPathResource("bean.xml"); 6 7 BeanFactory factory = new XmlBeanFactory(resource);
ApplicationContext的实现类
ClassPathXmlApplicationContext(常用)
FileSystemXmlApplicationContext
XmlWebApplicationContext
Bean的定义标识和别名
Bean的实例化 就是取代new实例化对象,spring中不再使用new
默认的构造方法、静态工厂方法、工厂类的工厂方法
Bean的scope也就是其作用域的意思
Singleton
Prototype
Request
Session
globalsession
一、IOC简单实例
首先的创建spring工程,如果用idea的话,会自动加载一些spring jar文件。
新建Person类
1 package com.feimao.IOC.test; 2 3 public class Person { 4 private String name; 5 private int age; 6 7 public String getName() { 8 return name; 9 } 10 11 public int getAge() { 12 return age; 13 } 14 15 public void setName(String name) { 16 this.name = name; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 }
创建Tester测试类
1 package com.feimao.IOC.test; 2 3 import org.springframework.beans.factory.BeanFactory; 4 import org.springframework.beans.factory.xml.XmlBeanFactory; 5 import org.springframework.core.io.ClassPathResource; 6 import org.springframework.core.io.Resource; 7 8 9 public class Tester { 10 public static void main(String[] args){ 11 Resource r = new ClassPathResource("beans.xml"); 12 BeanFactory factory = new XmlBeanFactory(r); 13 Person per = (Person) factory.getBean("per"); 14 System.out.println(per.getName()); 15 System.out.println(per.getAge()); 16 } 17 }
创建beans.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE beans PUBLIC "_//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" 3 > 4 <beans> 5 <bean id = "per" class = "com.feimao.IOC.test.Person"> 6 <property name = "name" value = "feimao"/> 7 <property name = "age" value = "28"/> 8 </bean> 9 10 </beans>
测试结果如下图: