Spring_day01
框架的概念:
框架就是把一些通用的类,和方法集中起来。避免不必要的重复开发,解放了程序员,提高了开发效率
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相关推荐
- 黑马 Spring_day01
Spring_day01 今日目标 掌握Spring相关概念 完成IOC/DI的入门案例编写 掌握IOC的相关配置与使用 掌握DI的相关配置与使用 1,课程介绍 对于一门新技术,我们需要从为什么要学. ...
- SSM框架学习记录-Spring_day01
1.核心概念 当前项目中的问题 下面代码的实现十分简单,但是业务层需要调用数据层的方法,就要在业务层new数据层的对象,如果数据层的实现类发生变化,业务层的代码也需要跟着改变,意味着要编译打包和重新部 ...
- spring_day01 demo代码
本博客为这篇博客的辅助博客,主要是其中自己写的一些Demo.java代码 目录 日志的用法 Demo1.java log4j.properties 控制反转IOC的测试 Demo2.java appl ...
- 通过AOP控制事务的案例
1.xml配置版 执行以下sql语句 create table account(id int primary key auto_increment,name varchar(40),money flo ...
- spring项目搭建-导包对象准备
咱们先写一下搭建步骤,第一步你们肯定都知道,第一步导包,反正导包先看第一步,在咱们的resource文件夹里面,我还是放了两个zip包,按照惯例,你把它解压出来,然后解压的话我已经做好了,接下来我要介 ...
最新文章
- BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览
- python内置函数sorted(x)的作用是_Python内置filter与sorted函数
- php语法大全下载,PHP下载文件
- python计算运动会某个参赛选手的得分。数据保存在文件中_Python基础教程之第二章---变量和字符串(1) 搬运...
- 【Android工具】安卓应用市场哪家强?chrome浏览器apk下载插件,play安装包下载,妈妈再也不用担心我找不到安装包了...
- error: ‘to_string’ is not a member of ‘std’———已解决
- 面向对象-多态与多态性
- 轮距和轴距有什么区别_迈巴赫S级推“婚庆版”?轴距超3.3米 612马力配全时四驱...
- 使用python获取焦点窗口的进程名称
- 科普:UTF-8 GBK UTF8 GB2312 之间的区别和关系
- http和https的区别与联系
- SSD Single shot detection 单发多框检测 实现 多尺度锚框 动手学深度学习v2
- c语言—数组详解(建议收藏)
- 网站联系表单,honeypot蜜罐理论及操作技术,诱饵机器人
- 概率学A和C公式,Java计算阶乘,不重复三位数
- 同厂玩伴---鸭子兄传
- Web前端工程师知识体系大全,Web前端入门基础体系
- java接口,设计一个动物声音模拟器
- 万字带图教程带你从零开始安装CentOS
- Android FaceBook sdk 登录接入