spring

一、spring是什么

轻量级开源框架,分为三层表现层,持久层,业务层。有两个核心特性ioc.aop。简化开发

1.优点

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。

2.缺点

像胶水一样将框架粘在一起,不容易拆分。1使用门槛较高,入门需要较长时间。2spring依赖反射,反射影响性能。

线程不安全,使用原型模式,使用threadlocal。线程本地变量。

3.ioc理解和原理

就是控制反转,正常情况下,java创建对象需要new一个对象,使用ioc就把管理这些对象的权限交给了spring容器。然后spring容器帮你创建这些对象。要用的时候去要对象就行了

原理:通过工厂模式还有反射实现的,在spring初始化的时候先去加载配置文件,解析配置文件,spring知道扫描哪些路径,就会扫描到这些类,会加载成beandefintion生成springbean。生成后开始装配,根据类型或者名字注入到相应字段里。其实就是通过反射调用set方法。

依赖注入(DI):就是在需要对象的时候 通过注解或xml配置的方式注入到代码里去。

  1. aop理解和原理

AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

在运行时,动态地将代码切入到类的指定方法,位置上的编程思想。

底层原理是通过动态代理实现的。

目标类或者要代理类实现了接口,使用jdk动态代理,生成一个实现了接口的代理类。没有实现接口,使用cglib生成一个子类作为代理类。

Aop在Spring中的作用

  • 横切关注点:跨越应用程序多个模块的方法或功能。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如日志 , 安全 , 缓存 , 事务等等 …

  • 切面(ASPECT):横切关注点 被模块化 的特殊对象。即,它是一个类。

  • 通知(Advice):切面必须要完成的工作。即,它是类中的一个方法。

  • 目标(Target):被通知对象。

  • 代理(Proxy):向目标对象应用通知之后创建的对象。

  • 切入点(PointCut):切面通知 执行的 “地点”的定义。

  • 连接点(JointPoint):与切入点匹配的执行点。

官网 : http://spring.io/

官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/

GitHub : https://github.com/spring-projects

依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

循环依赖其实就是循环引用,也就是两个或两个以上的bean对象互相持有对方,最终形成闭环。比如A依赖B,B依较C,C又依赖A,形成循环依赖。

如何解决。

三级缓存或者注释重复使用的依赖。

二、编程式事务与声明式事务

回顾事务

  • 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!

  • 事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。

事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。

编程式事务

使用TransactionTamplate

使用TransactionManager

声明式事务

XML文件配置

java代码配置---@transactional

事务四个属性ACID

  1. 原子性(atomicity)

  • 事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用

  1. 一致性(consistency)

  • 一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中

  1. 隔离性(isolation)

  • 可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏

  1. 持久性(durability)

  • 事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中

三、Spring IOC 自动装配 autowire

  • 自动装载是Spring提供的一种更加简便的方式来完成DI,不需要手动配置property,IOC 容器会自动选择bean来完成注入

  • 自动装载有两种方式:

  • byName:通过属性名完成自动装载

  • byType:通过属性对应的数据类型完成自动装载

byName的操作如下:

在spring.xml中配置Car和Person对应的bean,并且通过自动装载完成依赖注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="car2" class="com.zyh.pojo.Car">
        <constructor-arg name="num" value="1"></constructor-arg>
        <constructor-arg name="brand" value="奥迪"></constructor-arg>
    </bean>
    <bean id="car" class="com.zyh.pojo.Classes"></bean>
    <bean id="person" class="com.zyh.pojo.Person" autowire="byName" >
        <property name="name" value="张三"></property>
        <property name="id" value="2"></property>
    </bean>


</beans>

byType的操作如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="car2" class="com.zyh.pojo.Car">
        <constructor-arg name="num" value="1"></constructor-arg>
        <constructor-arg name="brand" value="奥迪"></constructor-arg>
    </bean>
    <bean id="car" class="com.zyh.pojo.Classes"></bean>
    <bean id="person" class="com.zyh.pojo.Person" autowire="byType" >
        <property name="name" value="张三"></property>
        <property name="id" value="2"></property>
    </bean>

</beans>

希望对大家有帮助,有用的大家可以点个赞~~~

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值