Spring深入学习(2)基于xml文件的IOC配置以及核心容器的相关知识点

搭建项目

那么,在理解了IOC之后,我们知道了使用工厂类解耦合的方式。那么,如果从零开始搭建一个功能完整的工厂类,会耗费大量的时间和精力。这时候就轮到Spring框架出马了。
现在我们开始搭建一个Spring项目
第一步,创建一个maven项目
再配置文件中添加spring的依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
    </dependencies>

在resource目录中添加bean.xml文件,并添加约束

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

在bean.xml配置文件中,添加

    <bean id="userService" class="com.tianqicode.service.impl.UserServiceImpl"></bean>
    <bean id="userDao" class="com.tianqicode.dao.impl.UserDaoImpl"></bean>

这里id表示获取对象使用的id
class表示全限定类名
依然使用之前的那个模拟保存用户的应用来帮助理解这一部分内容
将之前的项目复制到Java目录下,将factory类删除,使用Spring来获取对象

package com.tianqicode.ui;

import com.tianqicode.dao.UserDao;
import com.tianqicode.service.UserService;
import com.tianqicode.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Client {

    public static void main(String[] args) {

        //1、获取核心容器
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        //2、根据id获取Bean对象
        UserService userService = (UserService) context.getBean("userService");
        UserDao userDao = (UserDao) context.getBean("userDao");

        //打印结果,成功通过id获取到对象
        System.out.println(userService);
        System.out.println(userDao);
        //userService.saveUser();
    }

}

这时候我们就可以从spring的核心容器中获取之前配置的对象了。

ApplicationContext的三个实现类

1. ClassPathXmlApplicationContext(最常用)
它可以读取类路径下的配置文件,要求配置文件必须在类路径下,否则访问不到
2. FileSystemXmlApplicationContext
它可以加载磁盘任意路径下的文件
3. AnnotationConfigApplicationContext
它是用于读取注解创建容器的

核心容器的两个接口

1、ApplicationContext
他在构建核心容器时,创建对象采取的策略是采用立即加载的的方式。也就是说,只要读取完配置文件就立即创建配置文件中的对象。
2、BeanFactory
他在构建核心容器时,创建对象采取的策略是采用延迟加载的方式。也就是说,什么时候使用id获取对象了,什么时候再创建。

Spring对Bean的管理细节

1、创建bean的三种方式

第一种方式,使用默认的构造函数创建
这种方式也是默认的创建方式,在配置文件的bean标签中配以 “id”以及“class”属性后,并且没有其他的属性和标签时,默认使用这种方式构造对象。若此时,相应类中没有默认的构造函数,则对象创建失败。抛出异常。
第二种方式,使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器)

<bean id="获取工厂类对象id" class="工厂类全限定类型名"></bean>
<bean id="获取方法创建对象的id" factory-bean="获取工厂类对象id" factory-method="创建对象的方法"></bean>

第三种方式,使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)

<bean id="获取对象id" class="静态方法全限定类名" factory-method="创建对象的方法"></bean>

2、bean对象的作用范围

bean标签的scope属性:
作用:用于指定bean的作用范围
取值
singleton:单例的(默认值)
prototype:多例的
request:作用于web应用的请求范围
session:作用于web应用的会话范围
global-session:作用于集群环境的会话范围(全局会话范围),当在非集群环境下,于session作用相同。

3、bean对象的生命周期

单例对象
出生:当容器创建时对象出生
活着:只要容器还在,对象就一直活着
死亡:容器销毁,对象消亡
多例对象
出生:当我们使用对象时spring对象帮我们创建
活着:只要对象在被使用,就会一直活着
死亡:当对象长时间不被使用,且没有其他对象引用时,由Java垃圾回收机器回收

发布了30 篇原创文章 · 获赞 2 · 访问量 638

猜你喜欢

转载自blog.csdn.net/qq_43585377/article/details/102613300