Spring(一)Spring概述

1.为什么要有Spring?

参考博文:https://blog.csdn.net/JavaAQA/article/details/103412503

简单来说就是在Model1开发阶段,所有的代码全写在jsp里面了,这。。。虽然写的时候一根面条,但是高度耦合啊,修改的时候可就麻烦了,然后Model2开发阶段呢,引入了servlet,将一些控制代码写在了servlet里,但是jsp里面还是有很多的Java代码啊!然后又推出了MVC三层架构模式,很熟悉有木有,就是有controller、service、dao等等,那我们在controller中要使用service,肯定就得new一个service啊,然后在service里又得new一个dao吧,然后还有一些别的对象也要new,对我们来说倒也不是太麻烦,但是存在了那么多生命周期又长的实例,GC的压力可就大了!虽然我们可以考虑将每一个的创建都改成单例模式,但是这修改,你确定你想一个一个类去改吗?

那我们就想了,能不能有一个对象池啊,我要什么就拿什么,你还得为我这个对象负责。然后就真有了,Spring提出了EJB,但是呢,EJB非常的低效臃肿,可能配环境就得配老半天。程序员一看,这不行啊,太影响效率了,所以民间就推出了:Spring。

看看这名字,程序员的Spring。

2.Spring是什么?

Spring是一个开源的、轻量级的Java开发框架。首先要知道的是,它的出现并不是为了取代任何一个框架。相反,它可以使得Java EE的开发更加任意,它可以加速集成其它的框架,使得不同的框架之间的耦合度降低。

Spring的核心是IOC和AOP。

3.IOC及DI

IOC是inversion of control的缩写,即控制反转。是Java的一种设计原则,目的是降低代码之间的耦合度。

反转好理解,什么是控制呢?

控制就是我们获取资源的方式。

  • 主动式:我们自己在所需要的地方new一个对象;
  • 被动式:资源的获取交给容器。

即之前有程序员完成的一部分内容,现在可以交给框架来完成了,我们只需要告诉框架我们需要的东西就可以了。

Spring就是将自己设计为了一个大型的容器,负责管理(包括创建、配置、销毁等等)系统中所涉及到的所有对象,并利用DI来处理对象的依赖关系。

DI:dependency injection,依赖注入·:利用反射,给对象的属性赋值。

4.Spring的使用

所有的框架使用都分为三步:jar包--->配置文件--->测试。

(1)jar包

先看一张Spring的结构图:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.3</version>
</dependency>

(2)配置文件

准备一个Person类,属性如下,书写其setter/getter方法,以及重写toString()

private String name;
private int age;
private char sex;

在resource下新建一个applicationContext.xml文件(文件名任意,但是最好为这个)

<?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">

<!--    放入容器中-->
<!--    指定要放入的类,以及取一个id-->
    <bean id="person" class="com.dh.pojos.Person"/>
</beans>

(3)测试

首先要创建容器,Spring有两个容器:

  • beanFactory:这是容器的顶级接口,这就意为着它的功能是比较少的,而且它是懒加载模式,只有在获取bean的时候才会实例化bean。
  • applicationContext:beanFactory的子接口,可以有更多的功能,如国际化、注解配置等。在创建容器的时候就会同时的实例化所有的bean。(经常使用)

我们刚刚写的配置文件也是在创建容器的时候使用的,获取配置文件也有两张方式:

  • ClassPathXmlApplicationContext:从当前类路径下获取;(经常使用)
  • FileSystemXmlApplicationContext:文件的绝对路径。

获取到容器之后就可以获取容器里的bean了:

@Test
public void test01(){
    ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
    //通过配置文件中的id来获取对应的bean
    Person person = (Person) application.getBean("person");
    System.out.println(person);
}

此时可以获取到person对象,但是因为还没有给其属性赋值:

Person{name='null', age=0, sex= }

那么如何给对象的属性赋值呢?

我们可以在配置文件中,指定其属性值:

<bean id="person" class="com.dh.pojos.Person">
    <property name="name" value="zhangsan"/>
    <property name="age" value="18"/>
    <property name="sex" value="男"/>
</bean>

此时再执行程序:就可以看到对象的属性已经有值了。

Person{name='zhangsan', age=18, sex=男}

至此,我们就已经完成了第一个Spring了,但是Spring中还有很多的细节,在下一篇文章中接着探讨。

posted @ 2021-04-01 10:34  deng-hui  阅读(90)  评论(0编辑  收藏  举报