Spring_day01
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(){ }
[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的主要内容,如果未能解决你的问题,请参考以下文章