spring

1.什么是spring框架?
spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,是一个分层的javaEE一站式轻量级开 源框
架.
2.spring的作用?
方便解耦,简化开发,AOP编程支持,声明式事务支持,集成Junit更加方便的进行分层测试,方便集成各种优秀框架.
3.什么是IOC?
控制反转,把创建对象的权利交给spring
4.什么是DI?
属性的依赖注入,spring在通过IOC创建对象的时候,如果对象还有属性,就一并给赋值进去DI是在IOC的基础上进行对象的属性 注入
5.依赖注入的三种实现方式?
构造器注入,Setter方法注入,接口注入
5.什么是AOP:在软件业,AOP为Aspect Oriented Programming的缩写,意味:面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统 一维护的一种技术,AOP是OOP的延续.将一些共性的内容进行抽取,在需要用到的地方,以动态代理的方式进行插入.在不修 改源 码的基础上,还能对源码进行前后增强。

6.Spring支持的事务管理类型?

a、编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。 b、声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。

动态代理

什么是动态代理?举个例子,生活中一般在打官司的时候都会请代理律师,为什么要请律师呢?是因为开庭的时候大部人对于打官司没有经验,只会说出自己案件的陈述,并不会根据法律等争取自己权益的最大化,此时就可以请律师帮助自己不仅完成对案件的陈述,还能争取权益最大化。那么Java中也是一样,如果要对功能进行增强就可以使用动态代理

为什么要使用动态代理?

  1. 请看如下例子,一个演员的本质工作是做音乐表演、舞蹈表演、娱乐表演等,但是目前疫情管控,演出前不得不配合政府做好防疫管控。最基本的实现方法是直接对方法进行改造,添加对应的功能。


 

  1. ,如果有十处、一百处需要同样的处理那么代码需要重复十次、一百次。当然我们可以把这些功能封装成一个增强方法,然后在功能方法中进行调用,但是也出现了方法的十处、一百处的调用操作,一旦增强方法名字改变,就需要完成所有调用处代码的修改。或者有一天不需要这些增强操作了,就再次需要在这十处、一百处删除方法调用。所以这种操作不适用于大型的项目开发的需求,此时我们就必须使用Java的动态代理机制。

在Java开发中如果一个类中的方法在基本功能之外需要进行功能扩充或者功能增强,如:事务控制、权限判断、日志记录等等操作,此时可以使用动态代理机制。

Java的JDK中Proxy类可以实现基于接口的动态代理,实现步骤示例如下:

  1. 因为Proxy类必须基于接口进行动态代理,所以首先创建接口,定义接口的规范,即功能方法的定义。

  1. 定义实现接口的子类,实现接口定义的方法,此方法只需要把核心功能实现即可,其他增强的操作可以在代理类中实现。

  1. 定义代理类,在代理类中对被代理对象进行方法增强。

基于子类的CGLib动态代理,可以使用Enhancer类完成直接对某个类进行动态代理。具体操作步骤如下:

  1. 创建被代理的类,并且定义功能方法,只需要完成核心功能即可。

  1. 定义代理类,使用Enhancer创建代理对象,对被代理对象进行方法增强。

Spring的AOP

什么是AOP

AOP的相关术语

  • Joinpoint(连接点):

所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。

  • Pointcut(切入点):

所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。

  • Advice(通知/增强):

所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。

  • Introduction(引介):

引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或 Field。

  • Target(目标对象):

代理的目标对象。

  • Weaving(织入): 

是指把增强应用到目标对象来创建新的代理对象的过程。spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。

  • Proxy(代理):

 一个类被 AOP 织入增强后,就产生一个结果代理类。

  • Aspect(切面):

是切入点和通知(引介)的结合。

AOP基于XML配置的入门案例:

  1. 首先导入IOC和AOP所需要的jar包

  1. 创建UserService类,这个类完成核心功能操作。

  1. 创建Logger类,这个类是用来做功能的增强。

  1. 在spring的beans.xml中开始进行AOP的配置:
  • 首先把核心类和增强类的bean配置到IOC的容器中
  • 使用<aop:config>标签在进行AOP的配置,先通过aop:aspect标签标明谁是增强类。然后在标签中进行aop:before(前置)、aop:after-returning(后置)、aop:after-throwing(异常)、aop:after(最终)的配置,让增强类的某个方法对核心功能类的某一类方法进行功能增强。

  1. 在测试类中测试UserService的方法是否被增强。

环绕通知

  1. 环绕通知是一种提供自由灵活对核心类方法进行增强的操作手段,首先还是在beans.xml中配置环绕通知。

  1. 接着我们需要在增强类中完善我们环绕通知的方法,这个方法需要定义一个ProceedingJoinPoint接口对象作为方法参数,且方法返回值是Object。

  1. 环绕通知的实现:其实就是通过ProceedingJoinPoint的实现类对象(spring框架会创建)获取要增强的那个类的方法参数、执行方法、获得方法返回值。然后在方法执行之前的操作就是前置通知、在方法执行后的操作就是后置通知、在异常处理中的操作就是异常通知、在finally中执行的操作就是最终通知。具体如下:

基于注解的AOP配置

  1. 首先按照基于XML配置的项目部署。

  1. 首先关于定义IOC容器的bean标签使用注解替换。

 

  1. xml配置的切面配置信息我们在增强类中使用@Aspect注解替代。

  1. xml配置切入点的前置通知、后置通知、异常通知、最终通知分别使用@Before、@AfterReturning、@AfterThrowing、@After这四个注解替代,同时在注解中定义要增强那个包中那个类的那个方法,且使用表达式表示。

  1. 在beans.xml中配置注解的扫描,同时配置开启aop注解的支持。

  1. 在测试类中测试注解配置的操作是否生效。

t。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值