Spring相关的知识点总结(1)

Spring相关的知识点总结(1)

Spring Springmvc SpringBoot

Spring 一站式的轻量级的java开发框架 底层开发

Springmvc主要吹web开发 路径映射和视图渲染,属于Spring框架中WEB成开发的一部分 web框架

SpringBoot一键式启动 简化了配置流程 脚手架

Spring是一个轻量型的框架,是一个容器,是一个生态。

Spring的两大支柱 IOC和AOP是基于反射来实现。

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

反射 :反射就是把java类中的各种成分映射成一个个的Java对象

IOC AOP

 IOC(Inverse of Control):控制反转,也可以称为依赖倒置。

形象的举例就是:

        通常情况下,假如你有一天在家里口渴了,要喝水,那么你可以到你小区的小卖部去,告诉他们,你需要一瓶水,然后小卖部给你一瓶水!这本来没有太大问题,关键是如果小卖部很远,那么你必须知道:从你家如何到小卖部;小卖部里是否有你需要的水;你还要考虑是否开着车去;等等等等,也许有太多的问题要考虑了。也就是说,为了一瓶水,你还可能需要依赖于车等等这些交通工具或别的工具,问题是不是变得复杂了?那么如何解决这个问题呢?

        解决这个问题的方法很简单:小卖部提供送货上门服务,凡是小卖部的会员,你只要告知小卖部你需要什么,小卖部将主动把货物给你送上门来!这样一来,你只需要做两件事情,你就可以活得更加轻松自在:

        第一:向小卖部注册为会员。

        第二:告诉小卖部你需要什么。

        这和Spring的做法很类似!Spring就是小卖部,你就是A对象,水就是B对象

        第一:在Spring中声明一个类:A

        第二:告诉Spring,A需要B

Spring依赖注入DI的实现技术是:动态代理

JDK动态代理 接口

CGLIB动态代理

区别

JDK代理使用的是反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

CGLIB代理使用字节码处理框架asm,对代理对象类的class文件加载进来,通过修改字节码生成子类。

JDK创建代理对象效率较高,执行效率较低;

CGLIB创建代理对象效率较低,执行效率高。

JDK动态代理机制是委托机制,只能对实现接口的类生成代理,通过反射动态实现接口类;

CGLIB则使用的继承机制,针对类实现代理,被代理类和代理类是继承关系,所以代理类是可以赋值给被代理类的,因为是继承机制,不能代理final修饰的类。

JDK代理是不需要依赖第三方的库,只要JDK环境就可以进行代理,需要满足以下要求:

1.实现InvocationHandler接口,重写invoke()

2.使用Proxy.newProxyInstance()产生代理对象

3.被代理的对象必须要实现接口

CGLib 必须依赖于CGLib的类库,需要满足以下要求:

1.实现MethodInterceptor接口,重写intercept()

2.使用Enhancer对象.create()产生代理对象

使用JDK还是CGLIB

1)如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP,可以强制使用CGLIB实现AOP

2)如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

四种Aop的方式

经典的基于代理的AOP

@AspectJ注解驱动的切面

纯POJO切面

注入式AspectJ切面

通知

前置通知 方法执行前调用 对应注解 @Before

后置通知 方法执行后调用 对应注解 @After

返回通知 方法返回后调用 对应注解 @AfterReturning

异常通知 方法出现异常调用 对应注解 @AfterThrowing

环绕通知 动态代理、手动推荐方法运行 对应注解 @Around

应用场景

Authentication 权限检查

Caching 缓存

Context passing 内容传递

Error handling 错误处理

Lazy loading 延迟加载

Debugging  调试

logging, tracing, profiling and monitoring 日志记录,跟踪,优化,校准

Performance optimization 性能优化,效率检查

Persistence  持久化

Resource pooling 资源池

Synchronization 同步

Transactions 事务管理

扩展

连接点(Joinpoint)

程序能够应用通知的一个“时机”,这些“时机”就是连接点,例如方法调用时、异常抛出时、方法返回后等等。

切入点(Pointcut)

通知定义了切面要发生的“故事”,连接点定义了“故事”发生的时机,那么切入点就定义了“故事”发生的地点,例如某个类或方法的名称,Spring中允许我们方便的用正则表达式来指定。

切面(Aspect)

通知、连接点、切入点共同组成了切面:时间、地点和要发生的“故事”。

引入(Introduction)

引入允许我们向现有的类添加新的方法和属性(Spring提供了一个方法注入的功能)。

目标(Target)

即被通知的对象,如果没有AOP,那么通知的逻辑就要写在目标对象中,有了AOP之后它可以只关注自己要做的事,解耦合!

代理(proxy)

应用通知的对象,详细内容参见设计模式里面的动态代理模式。

织入(Weaving)

把切面应用到目标对象来创建新的代理对象的过程,织入一般发生在如下几个时机:

编译时:当一个类文件被编译时进行织入,这需要特殊的编译器才可以做的到,例如AspectJ的织入编译器;

类加载时:使用特殊的ClassLoader在目标类被加载到程序之前增强类的字节代码;

运行时:切面在运行的某个时刻被织入,SpringAOP就是以这种方式织入切面的,原理应该是使用了JDK的动态代理技术。

Spring由那些模块组成

七大模块

Spring Core  Spring Context  Spring DAO  Spring AOP  Spring WEB  Spring MVC  Spring ORM

1 Spring Core

Spring核心容器

核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

2 Spring Context

Spring 上下文

一个核心配置文件,为Spring框架提供上下文信息。

3 Spring DAO

Spring操作数据库的模块。

Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

4 Spring AOP

Spring 面对对象切程

AOP把一个业务流程分成几部分,例如权限检查、业务处理、日志记录, 每个部分单独处理,然后把它们组装成完整的业务流程。每个部分被称为切面

5 Spring WEB

单独的一个基于web框架的模块

Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

6 Spring MVC

单独的一个mvc框架

MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

7 Spring ORM

对象关系映射

Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值