aop+注解 实现对实体类的字段校验_深入理解spring中的aop和ioc(依赖注入和控制反转)的概念...

前言

对于spring的概念,在我们初学编程时都是必学的内容,在学习的过程中可能对于框架的使用有着一定的了解,其实在其框架设计中主要用到的核心组件是bean工厂,bean工厂使用控制反转和依赖注入的(ioc)的方式来降低代码之间的耦合度,提高代码的灵活性和控制。

dd872f2c8f0be3f5a15c52b30d7cdf3f.png

正文

上面已经说到了spring的基本概况了,这里就直接说下其aop和ioc的重点过程和平时我们所使用的注解是如何协调运行来装配bena的。

一、spring容器的常用注解

说到注解,其实和分层设计的思想已经向结合了,可以说spring框架的特性将分层思想利用的淋漓尽致了。

Controller:可以说是门户管理员,主要是和前端打交道,交互的控制层。

Service:业务代表层,当控制层打完交道后交给它来处理具体的事务。

Repository:用来标识获取数据然后交给业务层,分工明确,数据访问层。

到此说到了这些注解,可能使用都会,但这些注解程序时如何装配的呢,又是如何通过一个注解就像bena注入进去了呢,往下面看,理解了ioc后,对于这些就会一目了然了。

1

如上代码,将包扫描到后利用的就是ioc容器的功能了。

AutoWired:自动装配,很抽象,相信在调用方法时很多都用到了,包括属性字段等。

其实如果使用了此注解,当启动容器加载时如果检测到后ioc里面会找到此bean并且消除掉get/set后将其注入给特定的对象。这里就涉及到了依赖和控制的概念。

为什么我们搭建三层架构时要写上其名称呢?

这里的作用就是为了让ioc容器通过名称标识能找到并且将其注入,其实也就是反转策略。

Qualifier:指定bean的名称,这个就和容易理解了,当有多个bean时,需要指定名称方便实例化和注入。

Resource:不属于spring注解,但和AutoWired用法类似。

总结:Resource注解是j2ee的注解,AutoWired是spring的注解

一般在配置时需要加入

c4fc87fcc61282da02c9723e352f42f9.png

二、spring的IOC容器

在spring中ioc可以说是这个框架的核心组件了,在整个框架中起着至关重要的作用,其中有两个概念控制反转和依赖注入。那么这两是同一个概念吗?

控制反转:从本质上讲是程序将创建实例化的过程交给了spring容器来处理,然后将处理完成的实例对象注入给调用者,整个过程就是控制反转的过程。

依赖注入:当ioc容器将需要创建的bean实例化后再注入到调用者(需要实例化对象的方法),容器全权负责所有组件的装配,将符合依赖关系的对象通过java bean或者构造方法传递给调用者。

从本质上说就是ioc容器具有创建对象,实例化,定位,和配置应用程序的功能,当程序启动加载时可以将这些通过注解注入构造器注入等方式注入到controller、service等中。总体说控制反转和依赖注入是同一个概念。

ce06b5c8b3b235200ebb1bfec0c2b4cc.png

三、面向切面编程(AOP)

说到AOP都说是java面向对象(OOP)的升级概念,那么具体有什么作用?通俗的讲AOP具有控制和拦截整个程序、以及在程序前后添加动态的管理机制的作用。

例:现在有一段业务代码甲和乙。由于没有记录日志,现在需要在甲乙代码执行的前后打印相关日志,按照通俗的做法肯定是改变甲乙代码来实现,但如果使用aop就可以在不动甲乙代码的情况下使它们共用打印日志代码,这就是切面的编程概念。

其中AOP主要一般应用于签名验签、参数校验、日志记录、事务控制、权限控制、性能统计、异常处理。

一般在java中使用AOP首先得定义切面(Aspect),使用Aspect可以定义一个切面,当容器检测到此注解时会认为是一个切面(只能对bean起到作用,否则失效),一般是一个java类。

有了切面后就需要在切面中定义通知方法(Advice)(java类中的方法),根据情况可分为可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around)5种通知机制。

紧接着又了通知方法后需要有连接点(JoinPoint)来连接定义的切面程序,类中的所有方法和都是连接点。

切入点(Pointcut):顾名思义就是通知类中的那些方法需要连接。

有了切入点后需要目标对象(Target),也就是切入的对象,被通知的对象需要切入。

这里涉及到一个代理对象(Proxy)(动态代理的过程)。

织入(Weaving):当前面的工作做完后就需要织入了,整个过程就是一个动态代理的过程,也就是动态创建对象的过程,利用的是java的反射机制和动态代理来实现整个AOP过程。

总结:整个来说spring框架整体利用的是ioc容器和aop以及java的反射机制来形成的一个统一化思维的框架集合,整个过程就是bean装载的过程(工厂模式)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值