Spring的创建和使用1.0

目录

Spring项目的创建和使用的整个逻辑

创建Spring项目

创建一个Maven项目 

添加Spring的依赖到pom.xml文件中 

添加启动类 

存储Bean对象 

创建Bean 

将Bean注册到Spring容器中 

将对象从Spring框架中读出来 

创建Spring的上下文 

ApplicationContext和BeanFactory的区别

获取指定的Bean 

使用Bean 


Spring作为一个包含众多工具并且可以对这些工具进行管理的IoC容器,它有两个重要的作用,那就是存储对象和使用对象。要使用它的功能则必须将Spring创建出来,声明:本篇博客所讨论的Spring的创建和使用,是基于Maven来创建的,现在基本上没怎么用了,现在都是用SpringBoot直接创建Spring项目。虽说现在用的不多,但是对于帮助理解Spring还是很有帮助的,后面的博客还会讨论Spring的创建和使用2.0(也是基于Maven来创建的)。

PS:Spring框架的发展历程

Spring框架->Maven XML->Spring Boot->Spring Cloud

Spring项目的创建和使用的整个逻辑

1.创建Spring项目

2.将对象存储到Spring框架

3.将对象从Spring框架中读出来

创建Spring项目

创建Spring项目的过程和Servlet大致类似,主要包含以下三个步骤:

1.创建一个Maven项目;

2.添加Spring的依赖到pom.xml文件中;

3.添加启动类;

创建一个Maven项目 

这里的过程很简单,就不演示了,但是创建好有一点一定要注意:

检查setting里面的Maven有没有勾选User setting file(用户配置文件)、Local repository(本地存储库),像下面这样:

勾选用户配置文件的目的是为了:让Maven在下载依赖的时候,使用本地的配置文件,而且本地配置文件里面一定要配置国内源,也就是让Maven下载依赖从国内下载。默认配置文件里面的源都是国外的,下载会很慢而且很有可能会失败。 

勾选本地存储库就不用说了吧,Local repository是用来设置保存依赖(jar包)路径的,不勾选怎么保存啊。

还有一点,可能有的人他没有settings.xml文件,那就的去网上下载了,下载之后记得将镜像改为国内的。

添加Spring的依赖到pom.xml文件中 

将下面的依赖拷贝到pom.xml文件中,然后不要忘了刷新Maven

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

添加启动类 

创建启动类是为了测试Spring的功能。这个就随便在java目录下面创建一个类就行了:

因为当前这个类是放在框架中的,而现在的框架就是Spring,因此当前这个类启动的时候,Spring框架也就启动了 。

存储Bean对象 

首先Bean对象就是java中的普通对象,这里因为是将对象存储在Spring中,所以将这些对象比喻成豆子,所以就称为了Bean对象。存储Bean对象,主要分为两步:创建Bean、将Bean注册到Spring容器中。

创建Bean 

将Bean注册到Spring容器中 

在创建好的项目中添加Spring配置文件到resources目录下面,并且在配置文件中加入以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<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">
</beans>

然后再将User对象注册到Spring中就可以了,也就是在配置文件中加入一行代码:

        <beans>
                <bean id="user" class="model.UserBean"></bean>
        </beans>

上面这段代码的作用就是将对象存储到Spring框架中。而其中的id是对象的标识符,用于读取对象;class用来表示那个对象要保存在Spring中。 

将对象从Spring框架中读出来 

获取使用Bean对象分为三步:创建Spring的上下文、获取指定的Bean、使用Bean

创建Spring的上下文 

因为对象都交给Spring管理了,所以要想获取到对象,就必须先得到Spring的上下文。

在App文件中通过ApplicationContext来获取:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //ApplicationContext翻译为:应用上下文。其实就是Spring容器。
        //ApplicationContext接口下有很多实现类。其中有一个实现类叫做:ClassPathXmlApplicationContext
        //ClassPathXmlApplicationContext专门从类路径当中加载spring配置文件的一个Spring上下文对象
        //这行代码只要执行:就相当于启动了Spring容器,解析spring.xml文件、并且实例化所有的bean对象,放到spring容器当中
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
    }
}

上面是创建对象的过程,它里面做了如下事情:
1.加载spring-config.xml配置文件;

2.对xml文件进行解析操作;

3.获取xml文件bean标签属性值id和class;

4.使用反射根据类全路径创建对象;他这个创建的对象存放在IoC容器的Map里面(通过DefaultListableBeanFactory这个类可以发现,Spring将Bean存放在了下面的集合中:Map的key是Bean的唯一标识,以上面为例就是user,value为类的定义(描述信息))
 

private final Map<String, BeanDefinition> beanDefinitionMap;

上面 ClassPathXmlApplicationContext属于ApplicationContext的子类,拥有ApplicationContext的所有功能。

获取Spring的上下文还有另一种方式,通过BeanFactory来获取:

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

public class App {
    public static void main(String[] args) {
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
    }
}

ApplicationContext和BeanFactory效果是一样的。而BeanFactory是一个接口,ApplicationContext是BeanFactory的子类 。 

ApplicationContext和BeanFactory的区别

1.ApplicationContext和BeanFactory是IoC容器的两种实现方式;

2.它们两个的首先来源不同,前者是springframework.context包里面的一个类,后者是springframework.beans.factory包下面的一个接口。

3.从继承关系和功能上面来说:它们两是Spring容器的顶级接口,其中BeanFactory提供了基础的访问容器的功能,而ApplicationContext属于BeanFactory的子类,它不光拥有BeanFactory的功能,还支持国际化、资源访问、事件传播等功能。性能上,ApplicationContext是一次性加载并初始化所有的Bean对象,而BeanFactory是需要那个才去加载那个,因此更加轻量。

获取指定的Bean 

方式一,通过bean的id来获取:
public class App {
    public static void main(String[] args) {
        //1.得到Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.加载某个Bean
        UserBean user = (UserBean) context.getBean("user");
    }
}

这里的"user"就对应着注册对象中的id,因为context.getBean返回的类型是Object,所以要强转为UserBean类型。

该方式的缺点就是需要类型转换。 

方式二,通过类型获取:
public class App {
    public static void main(String[] args) {
        //1.得到Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.加载某个Bean
        UserBean user = context.getBean(UserBean.class);
    }
}

这种方式的优点,无需类型转换;

缺点:对于多个对象的同一种类型的Bean获取会报错; 

方式三,通过id+类型的方式来获取bean:
public class App {
    public static void main(String[] args) {
        //1.得到Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.加载某个Bean
        UserBean user = context.getBean("user",UserBean.class);
    }
}

 优点:无需类型转换,对于多个对象指向一个类的情况不会报错。

使用Bean 

import model.UserBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class App {
    public static void main(String[] args) {
        //1.得到Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.加载某个Bean
        UserBean user = context.getBean("user",UserBean.class);
        //3.使用Bean
        System.out.println(user.hello("李华"));
    }
}

总结Spring的创建和使用:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸鱼吐泡泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值