一、Spring获取ioc核心容器 三种加载配置文件的方式:
- ClassPathXmlApplicationContext加载类路径下的配置文件。
-
FileSystemXmlApplicationContext加载磁盘下任意路径的配置文件(必须有访问权限)
-
AnnotationConfigApplicationContext用于读取注解
注意:1)ApplicationContext创建核心容器的时候,是立即创建,且是把所有的对象都创建,适用单列模式,比如链接数据库。2)BeanFactory创建核心容器的时候,是延迟加载的。简答来说就是当用户调用的时候再创建对象。
二、Spring 对bean的管理
1.创建bean的三总方式
1)适用默认构造函数创建对象,在Spring的配置文件中使用bean标签,配和id和class属性后,且没有其他的属性,采用默认的构造函数创建bean对象,如果没有构造函数,则创建bean对象失败。例如:<bean id="user" class="cn.domain.User"></bean>
2)普通工厂模式创建对象(使用某个类中的方法创建对象,并存入Spring容器中)
xml bean对象配置:
<bean id="saveuser" class="cn.service.SaveUserImpl"></bean>
<bean id="user" factory-bean="saveuser" factory-method="saveuser"></bean>
具体方法:
public class SaveUserImpl {
public User saveuser(){
return new User();
}
}
测试方法:
public class UserTest {
@Test
public void saveUser(){
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
User user = (User)ac.getBean("user");
System.out.printf(String.valueOf(user));
}
}
3)使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入Spring容器总)
xml bean对象配置:
<bean id="user" class="cn.Factory.staticFactory" factory-method="getuset"></bean>
实现方法:
public class staticFactory {
public static User getuset(){
return new User();
}
}
测试方法:
public class UserTest {
@Test
public void saveUser(){
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
User user = (User)ac.getBean("user");
System.out.printf(String.valueOf(user));
}
}
以上三种方法的结果都是一样的 ,具体操作还需多体会和理解。
2. bean对象的作用范围
bean标签的scope的属性,它的作用就是bean标签的作用范围,其中包括5个:singleton、prototype、request、session、golbal-session。
singleton:单列模式,也是默认值。
prototype:多列的
request:web的请求范围
session :web的会话范围
golbal-session:集群环境的范围(全局范围),当不是集群环境时,它就是session。
3. bean对象的生命周期
单列对象:
出生:当容器创建时,出生。
活着:只要容器还在,你就一直活着
GG:容器销毁时,gameover。嘻嘻,你懂的!
多列对象:
出生:当我们使用时,Spring框架为我们创建。
活着:对象只要一直使用 ,就一直活着
GG:当对象长时间不使用当时候,java当垃圾回收机制就会为我们销毁。
三、依赖注入
能注入当数据有三种:基本数据类型、其他bean、复杂类型\集合类型。
注入当方式也是三种:构造函数注入(单列模式时默认构造函数,不一样)、使用set方法提供、注解提供。
构造函数注入:
使用constructor-arg标签,标签属性有type(注入当数据类型)、index(索引赋值)、name(给指定当属性赋值)、value(具体当值)、ref(关联当值)。
set方法注入:
使用property标签。需注意当是,当注入list结构时,可以用:list、array、set;当注入map结构时,可以用:map、props。