spring系列部分理解

spring
1.控制反转(IOC):
未使用spring框架之前,我们通常是自己new对象来调用方法。而应用spring框架后,把创建对象的操作交由spring容器为我们创建对象,需要用时由spring容器提供对象。这便是控制反转的通俗理解了。

        作用:主要便是降低代码耦合度。

        IOC是应用了工厂设计模式来实现的,Bean工厂创建bean对象,以key-value的形式存储在一个Map中。再由applicationContext.xml 配置bean对象给spring容器。

us=com.abc.service.impl.UsersServiceImpl

        bean标签的基本配置:
                bean标签: 把指定的类交给spring管理,让spring创建这个类的对象
                        id:唯一标识
                        class:bean的全限定类名(类的全路径地址)

<bean id="us" class="com.abc.service.impl.UsersServiceImpl"></bean>

spring的bean作用域:

<bean id="us" class="com.abc.service.impl.UsersServiceImpl" scope="singleton"></bean>

        1.singleton:只有一个该bean 的实例对象,spring默认使用该属性。--单例
        2.prototype:一个容器可以有多个该bean的对象,每次请求都会创建一个新的 bean 实例。
        3.request:将创建的bean对象放到request作用域中,仅在它对应的请求期间有效。
        4.session:将创建的bean对象放到session作用域中,仅在它对应的请求期间有效。
        5.global-session: 全局session作用域,仅portlet的web应用中使用。

2.依赖注入DI:是Spring的Ioc核心的具体实现。
        依赖注入即是让spring来完成属性的赋值。以往给类的属性赋值,一般是用set方法或者有参构造。
xml配置注入:
property标签: 告诉spring这个类里面有什么样的属性,要完成赋值工作。
        name :属性的名字是什么
        ref: 给这个属性注入的是一种对象类型 ,要写的是一个对象的id值
        value : 给这个属性注入的是一种普通的数据(字符串、基本数据类型)

<!-- set方式注入-->
​<bean id="us" class="com.abc.service.impl.UsersServiceImpl">
    <property name="属性名" value="属性值"></property>
    <property name="属性名" ref="bean的id"></property>
</bean>
​

3.AOP:面向切面编程。
               即是给某部分初始代码再写一个通知方法(增强方法代码)给接到该初始代码上作扩展。
               这里应用代理的方式实现,便达到了不修改源码的情况下,进行功能增强,通过动态代理实现的;减少重复代码,提高开发效率,方便维护。

xml部分配置:

<aop:config>
	<aop:aspect ref="通知对象">
        <aop:before method="通知对象里的通知方法" pointcut="切入点表达式(增强方法路径)"/>
    </aop:aspect>
</aop:config>

通知的几种类型:
        前置通知——目标方法运行之前调用   @Before   前置通知
        后置通知——目标方法运行之后调用(如果出现异常不调用)   @After   后置通知
        环绕通知——目标方法之前和之后都调用   @Around  环绕通知
        异常拦截通知——如果出现异常,就会调用   @AfterThrowing   抛出异常后通知
        后置通知——目标方法运行之后调用(无论是否出现异常都会调用)

AOP的代理主要分为静态代理和动态代理。而动态代理主要有两种方式:
                                                                                                JDK动态代理和CGLIB的动态代理。

4.事务:
        spring支持编程式事务管理和声明式事务管理两种方式。实际上是对数据库事务的支持,事务的作用是保证事务里多个操作,要么全部成功,要么全部失败。
        事务特性:ACID
        事务并发问题:脏读、不可重复读、幻读。
        事务隔离级别:读未提交、读已提交、可重复读、串行化。
spring实现事务的原理
        在某个方法上增加@Transaction注解,开启事务,这个方法中的所有sql都会在一个事务中执行,统一成功或者统一失败。
        进入正题:在一个方法上加了@Transaction注解后,Spring会基于这个类生成一个代理对象,会将这个这个代理对象作为bean,当使用这个代理对象的方法时,若该方法上存在@Transaction注解,那么代理逻辑会把事务的自动提交设置为false,然后再去执行原本的业务逻辑方法,如果执行的业务逻辑没有出现异常,那么代理逻辑中就会将事务进行提交,如果执行的业务逻辑方法出现了异常,那么会将事务进行回滚。

5.SpringMVC 的工作原理:
       
1.用户向服务器发送请求,请求被前端控制器 DispatchServlet 捕获;
        2.DispatcherServle 对请求 URL 进行解析,根据得到的请求资源标识符(URL),调用 HandlerMapping 处理器映射器;
        3.HandlerMapping 将找到处理请求的Handler (Controller)返回给DispatcherServle;         
        4.DispatcherServle通过HandlerAdapter 处理器适配器请求执行Handler ;
        5.Handler将处理好的模型数据和视图名称给HandlerAdapter,其再传给DispatcherServle;
        6.DispatcherServle再调用ViewResolver 视图解析器 将逻辑视图转化为真正的视图 View;
        7.DispatcherServle通过model 解析对View进行渲染;
        8.DispatcherServle获取到处理好的ModelAndView响应给用户。

6.springboot自动配置原理分析:
1.启动类启动,加载注解@SpringBootApplication
        1)又加载@SpringBootConfiguration 相当于配置类;
        2)同时又加载@EnableAutoConfiguration 开启自动配置;                                a.@Import(AutoConfigurationImportSelector.class) 导入选择自动配置类;
                b.调用selectImports方法(2.0.3)加载109个自动配置类(从spring.factories配置文件中获取的) 调用getAutoConfigurationEntry(2.1.0)加载118个自动配置类;
                c.每个配置类都有条件接口,条件判断@ConditionalOnClass(xxx.class)pom文件中是否有依赖 有依 赖则继续执行 没有不执行了;
                d.条件判断@ConditionalOnMissingBean(name = "xxx")spring容器中是否有bean对象 有,就不创建;没有,就创建。
        3)@ComponentScan 扫描当前启动类所在包或子包,创建bean对象放到容器中。

7.Spring Cloud:是一个集成各技术的技术栈,包含了很多组件。
        其中的几个核心组件:
                Eureka:服务注册于发现。
                Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
                Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
                Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
                Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值