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中还有很多的细节,在下一篇文章中接着探讨。