Spring

先学思想后实践,在实践当中不断体会思想。并通过多种案例学习。

spring framework是学习spring的基础,学spring全家桶之前要先学framework。spring是简化开发的,springboot是在简化开发(spring)的基础上加速开发,springcloud分布式开发。

特点:

Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!

优点:

免费开源框架(容器)、轻量级非入侵框架(不改变原本项目结构)、IOC AOP、支持事务的处理和对框架整合的支持。

Spring Boot 是一个快速开发的脚手架,基于SpringBoot可以快速的开发单个微服务。

SpringCloud是基于SpringBoot实现的。

都在使用SpringBoot进行快速开发,学习SpringBoot的前提,需要完全掌握Spring及SpringMVC

 

控制反转IOC(Inversion Of Control)

业务由原本的程序员管变成被动的由用户来管,使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象。由主动new产生对象转换为由IOC的(core container)提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转(IOC思想)。IOC方便的一点就是对象的创建不需要new了,对象又Spring创建,管理,装配。

原本因为用户的请求程序员需要大量的改变程序的源代码,现在控制反转的思想就是源代码不变,使用最精简的类设计,做到在增加业务的同时不会改变源代码。spring底层全部基于这个思想,就是源代码不变,到处提供的都是接口来操控源代码。控制反转,把主动权反转给用户了,不在程序员手里了,

Spring提供了一个容器,称为IoC容器,Ioc容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在Ioc容器中统称为Bean

DI(dependency Injection)依赖注入。比如bean容器里有service层跟dao层之间有依赖关系(service层的实现需要dao层的数据),这个时候DI负责实现bean容器当中不同bean之间依赖关系的建立,这叫依赖注入。

IOC和DI达到的效果就是充分解耦,使用IOC容器管理bean,在IoC容器里将所有的依赖关系的bean进行关系绑定(DI),最终实现的效果就是使用对象的时候不仅可以直接从IOC容器当中获取,并不且获取到的bean已经绑定好了所有的依赖关系。

IOC案例步骤:

1.pom.xml导包 spring-context 版本是后面带有RELEASE(稳定版本)

2.ApplicationContext.xml写配置文件,注意每一个bean的id,class。

3.main文件当中导入注解AppicationContext ctx = new ClassPathXmlApplicationContext(“ApplicationContext.xml”)

4.获取bean对象,这个就是ctx.getBean("ApplicationContext.xml里的bean的id"),这个就是一个java对象,但这个对象是一个object类型,想要得到自己自定义的类型就需要强制转化。

DI案例步骤:

1-4:IOC的步骤

5.配置不同bean之间的关系,需要bean属性property,需要对象(类)属性的名称name,需要跟别的对象bean进行绑定的ref。

bean的配置

每次创建出来的bean都是同一个对象(scope="singleton"),也就是说在堆空间是同一个,要想每次创建的不一样就要改作用范围,scope="prototype"。

默认使用singleton是为了节省空间。有些源代码不需要次次创建新的空间,因为这些对象的代码都是重复使用的,但是对于一些实例对象,就是里面会存有不同的数据的时候必须要prototype。(至于如何区分是否是重复使用,这个能力还要练)

实例化bean

bean本质上也是对象,创建bean也是根据无参构造创建的,这个构造函数不管是public何时private都可以,但是必须要无参构造函数。

也可以实现FactoryBean接口,实现一些方法来实现实例化。

bean的生命周期

初始化容器
        1.创建对象(内存分配)
        2.执行构造方法(也就是对象的构造方法)
        3.执行属性注入(set操作)
        4.执行bean初始化方法(ClassPathXmlApplicationContext接口下的方法,afterPropertiesSet)
使用bean
        1.执行业务操作
关闭/销毁容器
        1.执行bean销毁方法(destroy)

两种方法关闭
        1.手工关闭容器
        ConfigurableApplicationContext接口close()操作
        2.注册关闭钩子_在虚拟机退出前先关闭容器再退出虚拟机
        ConfigurableApplicationContext接口registerShutdownHook()操作

依赖注入方式

向一个类当中注入数据可以有两种方式,第一种就是通过set方法注入,对象当中提供一个接口(this.dao = dao)由外界传入创建的对象信息(new Dao)另一种方式使用构造方法向对象传递数据。

第二个问题,依赖注入DI,建立关系原来是两个对象之间的建立关系,如果想要的是一个对象跟一些基本数据类型建立关系呢?而不是引用类型(对象)。

根据以上的分成四种,官方叫set注入改成setter注入构造器注入。而这两个注入又分成基本数据类型和引用类型。

setter注入对于引用类型上面已经做过了,现在不知道的就是setter对于基本数据类型的注入以及构造器对于二者的注入。

1.setter对于基本数据类型的注入

A.需要在对象当中首先声明基本数据类型+set函数

B.只需要在bean当中加上一个属性<property name="num" value="12"></property>

2.构造器对于基本数据类型的注入,对于引用类型的注入

<constructor-arg name="dao11" ref="dao1"></constructor-arg>

只需要在对象(类)当中添加一个构造函数,xml文件当中bean添加上面这句话,这就算构造器对于引用类型的注入了

<constructor-arg name="num11" value="123"></constructor-arg>

这个也是添加一个构造函数也只是对于数据的构造函数,与引用类型不同的是这里不是ref而是value

一般使用setter注入。

依赖自动装配。只需要bean后面加上 autowire=“byType”

集合注入

前面是单一的内容(基本数据类型,对象等)注入,这次是多条数据的注入。

数组,List,Set,Map,Properties。这五种集合形式没什么就是一点使用方法。

spring对数据源对象管理,以及加载properties文件

Spring-15-案例:数据源对象管理_哔哩哔哩_bilibili

容器

创建容器

方式一:类路径加载配置文件
ApplicationContextctx=new ClassPathXmlApplicationContext("applicationContext.xml");
方式二:文件路径加载配置文件
ApplicationContextctx=new FileSystemXmlApplicationContext("D:\\applicationContext.xml");
加载多个配置文件
ApplicationContext ctx=newClassPathXmlApplicationContext("bean1.xml","bean2.xml");

获取bean

方式一:使用bean名称获取
Dao Dao =(Dao)ctx.getBean("dao");
方式二:使用bean名称获取并指定类型
Dao dao=ctx.getBean("dao",Dao.class);
方式三:使用bean类型获取(要求容器当中这个Dao类型只有一个)
Dao dao=ctx.getBean(Dao.class);

bean相关 

依赖注入

注解开发

方式1

使用@Component定义bean,只需要在类上面加上@Component("dao")。在xml配置文件上<context:component-scan base-package="找到类的位置"/>,这个时候注意xml配置文件会有一些找不到component-scan这个包的情况,搜搜。

【这个注解名字无所谓,一些业务一般都喜欢用接口然后勇哥实现类impl来实现接口,这里注解加的是就是实现类上】

Spring提供@Component注解的三个衍生注解,效果一样。只不过叫法不一样

@Controller:用于表现层bean定义
@Service:用于业务层bean定义
@Repository:用于数据层bean定义

方式2

这个方式就不需要配置文件了,首先就是定义一个类SpringConfig,上面加上两个注解就行了。这是第一步,之后就不能用原来的这段代码获取配置文件了,要更新为

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

更新为,这段代码获取配置文件(SpringConfig这个类)

ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道。读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

//加载配置文件初始化容器
ApplicationContextctx=new ClassPathXmlApplicationContext("applicationContext.xml");
/加载配置类初始化容器
ApplicationContext ctx=new AnnotationConfigApplicationContext(SpringConfig.class);

IOC的核心是工厂模式,AOP的核心是代理模式

AOP面向切面编程就是在不惊动原始代码对程序进行增强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值