框架的概念:

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

Spring  SpringMVC   Mybatis

:Spring

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

:轻量级

1.空间占用角度:

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

2.对容器的依赖角度:

对容器依赖性越低 越轻量

:Spring的IOC

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(){     }

2.@Test标签必须加载方法上

: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)

转载于:https://www.cnblogs.com/buyucgb/p/6021541.html

Spring_day01相关推荐

  1. 黑马 Spring_day01

    Spring_day01 今日目标 掌握Spring相关概念 完成IOC/DI的入门案例编写 掌握IOC的相关配置与使用 掌握DI的相关配置与使用 1,课程介绍 对于一门新技术,我们需要从为什么要学. ...

  2. SSM框架学习记录-Spring_day01

    1.核心概念 当前项目中的问题 下面代码的实现十分简单,但是业务层需要调用数据层的方法,就要在业务层new数据层的对象,如果数据层的实现类发生变化,业务层的代码也需要跟着改变,意味着要编译打包和重新部 ...

  3. spring_day01 demo代码

    本博客为这篇博客的辅助博客,主要是其中自己写的一些Demo.java代码 目录 日志的用法 Demo1.java log4j.properties 控制反转IOC的测试 Demo2.java appl ...

  4. 通过AOP控制事务的案例

    1.xml配置版 执行以下sql语句 create table account(id int primary key auto_increment,name varchar(40),money flo ...

  5. spring项目搭建-导包对象准备

    咱们先写一下搭建步骤,第一步你们肯定都知道,第一步导包,反正导包先看第一步,在咱们的resource文件夹里面,我还是放了两个zip包,按照惯例,你把它解压出来,然后解压的话我已经做好了,接下来我要介 ...

最新文章

  1. BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览
  2. python内置函数sorted(x)的作用是_Python内置filter与sorted函数
  3. php语法大全下载,PHP下载文件
  4. python计算运动会某个参赛选手的得分。数据保存在文件中_Python基础教程之第二章---变量和字符串(1) 搬运...
  5. 【Android工具】安卓应用市场哪家强?chrome浏览器apk下载插件,play安装包下载,妈妈再也不用担心我找不到安装包了...
  6. error: ‘to_string’ is not a member of ‘std’———已解决
  7. 面向对象-多态与多态性
  8. 轮距和轴距有什么区别_迈巴赫S级推“婚庆版”?轴距超3.3米 612马力配全时四驱...
  9. 使用python获取焦点窗口的进程名称
  10. 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系
  11. http和https的区别与联系
  12. SSD Single shot detection 单发多框检测 实现 多尺度锚框 动手学深度学习v2
  13. c语言—数组详解(建议收藏)
  14. 网站联系表单,honeypot蜜罐理论及操作技术,诱饵机器人
  15. 概率学A和C公式,Java计算阶乘,不重复三位数
  16. 同厂玩伴---鸭子兄传
  17. Web前端工程师知识体系大全,Web前端入门基础体系
  18. java接口,设计一个动物声音模拟器
  19. 万字带图教程带你从零开始安装CentOS
  20. Android FaceBook sdk 登录接入

热门文章

  1. linux开机自动启动
  2. 为Jfinal-weixin SDK添加微信连WiFi成功通知事件
  3. 让用户舒服起来 10个改善UI的技术
  4. 第18节 知识管理
  5. pyinstaller 打包selenium脚本 取消cmd
  6. 使用FiddlerCore来截取替换Http请求中的网页内容
  7. C# 多线程 线程池(ThreadPool) 2 如何控制线程池?
  8. 用JS的正则表达式如何判断输入框内为中文或者是英文
  9. [译]理解HTTP/304响应
  10. 查看字符集 oracle