Spring_day01

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring_day01相关的知识,希望对你有一定的参考价值。

框架的概念:

框架就是把一些通用的类,和方法集中起来。避免不必要的重复开发,解放了程序员,提高了开发效率

Spring  SpringMVC   Mybatis

:Spring

是一个开源框架。并且是一个轻量级的框架,能够一站式的分层部署项目。能够整合现在主流框架起到一个粘合剂的作用

:轻量级

1.空间占用角度:

spring的核心包不到1MB,占用计算机的资源特别小

2.对容器的依赖角度:

对容器依赖性越低 越轻量

SpringIOC

IOC就是控制反转

将对象创建的权利交给Spring容器来管理。由容器来管理对象的生命周期。

Person p = new Person();    //手动的创建过程

Person p1 = Spring容器.getXXX();

SpringIOC的实现步骤:

1.导入相关的JAR

2.编写实体类

3.编写配置文件(1.编写配置文件的头    2.编写对象的具体映射关系)

4.启动spring容器

5.通过容器获取对象

6.调用对象的方法完成相应的功能

Spring具体实现过程:

2.编写实体类

3.编写配置文件

1.spring默认的文件的名称是applicationContext.xml

2.spring的配置文件的名称可以是任意

3.beans 只要是spring管理的类就是一个bean

4.bean的编写 

id是唯一的标识 不能够重复

class写的就是类的全名(包名+类名)

id的编写原则 见名知意 首字母小写。其他驼峰规则

class属性最好使用自动提示保证不出错(如果没有就关闭再打开)

5.创建Spring容器

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

6.获取对象

Context.getBean("ID");

7.对象调用方法

:@Test补充

叫做单元测试

要求:

1.返回值必须是public void XXX(){     }

[email protected]标签必须加载方法上

SpringIOC的原理

控制反转的过程:

Spring容器在启动的时候。先去读取applicationContext.xml配置文件。读取顺序是按行读取。每当读取到一个bean的时候就会按照bean中的class属性依据反射的方法创建出来对象,把创建出来的对象当做value值存储到MAP中,bean的ID当做Map中的key形成键值对的形式,保存到Spring容器中,方便以后调用

:对象获取的方法

1.通过bean中的id能够获取对象

context.getBean("hello"); 

2.通过class属性来获取

Hello hello = context.getBean(Hello.class);

注意:

1.对象获取的时候尽量使用ID,不要用class,可能会由于类型不唯一报错。

2.如果bean中的ID重复,那么Spring在创建对象时保存到map中的时候就会报错。会报ID已经存在的错误。

原因:已经存在的bean不能被修改

:对象创建的方式

1.通过默认的构造方法创建对象

注意的前提:

通过bean中的class利用反射生成对象的时候必须要有无参构造。所以后再写构造方法的时候切记一定要加无参构造,否则生成对象时会出错。

2.静态工厂创建对象

class 静态工厂类

factory-method 生产对象的方法

<bean id="calendar1" class="factory.StaticFactory" factory-method="getDate"></bean>

Spring的执行过程:

首先会根据class找到静态工厂类,然后通过factory-method

找到类中的静态方法,执行相关的操作,如果该方法不是静态方法则会报错。所以使用静态工厂 必须要调用静态方法

3.实例工厂创建对象

<bean id="newFactory" class="factory.NewFactory"></bean>

<bean id="calendar2" factory-bean="newFactory" factory-method="getDate"></bean>

实例工厂创建对象时,首先根据factory-bean找到相应的工厂bean,然后根据工厂的class创建工厂对象。根据factory-method

调用工厂对象的方法创建需要的对象。

4.Spring工厂创建对象

<bean id="calendar3" class="factory.SpringFactory"></bean>

class属性写的是Spring工厂的类型。当Spring容器在创建对象的时候会自动的调用实现方法中的getObject方法,帮助创建对象。

SpringFactory需要实现一个接口

SpringFactory implements FactoryBean<Calendar>

其他的都交给Spring来处理

Spring bean中的属性

1.别名标签

<alias name="TareneHello" alias="你好1607"/>

2.对象的单例和多例

单例对象:spring容器内部只有一份

1.Spring容器内部默认维护了一个单例对象。

2.scope="prototype"

scope属性为prototype时根据bean生成的对象就是多例对象。

3.scope="singleton" 

scope属性为singleton和默认不写的时候对象创建都是单例的。

使用场景:

购物车需要是多例的,否则会造成混论。

3.懒加载问题

说明:理想状态下,我们需要什么对象容器帮我们生产什么对象,这是最合理的,这样做既能满足需求又能减少计算机压力

1.什么是懒加载:

懒加载就是在容器启动的时候不会创建对象,当通过容器getBean()的时候才会创建对象。这样做能实现最理想的状态。

2.lazy-init="true" 实现懒加载

   lazy-init="false" 立即加载

   如果默认不写 也是立即加载

3.全局的懒加载配置

default-lazy-init="true" 就能实现懒加载

default-lazy-init="false/default" 立即加载

bean中的懒加载为default 应该与全局的懒加载配置保持一致。

4.自定义的初始化和销毁方法

init-method="init" destroy-method="destroy"

自定义的初始化和销毁可以手动配置。并且执行。

5.DI(依赖注入)

可以通过Spring容器可以动态的注入属性

1.依赖注入可以为简单类型赋值,也可以为引用类型赋值。

但是前提条件是属性必须添加setXXX方法。如果没有set方法则不能实现注入。

2.Spring可以为简单类型和复杂类型进行赋值。包括

List Set Map(内部维护的是一个LinkedHashMap)

以上是关于Spring_day01的主要内容,如果未能解决你的问题,请参考以下文章

Spring_day02

Spring_day04

Spring_day03

黑马程序员SSM框架教程_Spring+SpringMVC+MyBatisPlus笔记(自学用,持续更新)

IOC注解开发与XML整合

01. 获取spring源码