Spring的IOC和AOP原理及其使用
IOC(要做到编译期不依赖,运行期才依赖)
传统模式
Spring的处理方式
采用了工厂模式,降低了类之间的耦合度
基于动态代理增强代码功能,降低了业务模块之间的耦合度,有两种代理方式:
- JDK动态代理 (基于接口的动态代理)
- cglib动态代理(基于子类的动态代理)
AOP
引入依赖:
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</version>
</dependency>
5种通知类型理解
xml方式:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><context:component-scan base-package="com.frank"/><!--配置aop--><aop:config><!--配置切面--><aop:aspect ref="logger"><!--配置切入点--><aop:pointcut id="loggerPointcut" expression="execution(* com.frank.service..*(..))"/><!--配置前置通知--><aop:before method="before" pointcut-ref="loggerPointcut"/><!--配置后置通知--><aop:after-returning method="afterReturning" pointcut-ref="loggerPointcut"/><!--配置最终通知--><aop:after method="after" pointcut-ref="loggerPointcut"/></aop:aspect></aop:config>
</beans>
xml+注解方式:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><context:component-scan base-package="com.frank"/><!--开启aop注解配置--><aop:aspectj-autoproxy/>
</beans>
package com.frank.advice;import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;@Component
@Aspect
public class Logger {@Pointcut("execution(* com.frank.service..*(..))")public void point() {}@Before("point()")public void before() {System.out.println("前置通知");}@AfterReturning("point()")public void afterReturning() {System.out.println("后置通知");}@After("point()")public void after() {System.out.println("最终通知");}}
纯注解配置:
<!--开启aop注解配置-->
<aop:aspectj-autoproxy/>
将上面xml配置改成在主配置类上加@EnableAspectJAutoProxy开启注解支持
Spring的IOC和AOP原理及其使用相关推荐
- 初学者快速了解spring的IOC和AOP原理
spring框架概述 1.spring是轻量级的开源的javaEE框架 2.spring可以解决企业应用开发的复杂性 3.spring有两个核心部分:IOC和AOP (1)IOC:控制反转,把创建对象 ...
- 【Spring 源码阅读】Spring IoC、AOP 原理小总结
Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...
- Spring中IOC和AOP的详细解释(转)
原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...
- Spring:IOC和AOP
Spring:IOC和AOP 一. IOC (1) 引入 (2) 定义 (3) 作用 (4) 实现 (5) DI依赖注入 二. AOP (1) 概念 (2) Spring中的AOP (3) 入门案例 ...
- Spring总结(IOC、AOP原理以及Spring事务)
一.概述 1.Spring是一个开源免费且轻量级的框架 , 非侵入式的 . 2.控制反转 IoC , 面向切面 Aop 3 .对事物的支持 , 对框架的支持 一句话概括: Spring 是一个轻量级的 ...
- 重新学习Spring2——IOC和AOP原理彻底搞懂
一.AOP 1 Spring AOP 的实现原理 是对OOP编程方式的一种补充.翻译过来为"面向切面编程". 1 AspectJ是静态代理的增强:所谓静态代理就是AOP框架会在便一 ...
- 彻底学会Spring的IOC和AOP——理论+实操
目录 1 IOC 1.1 概念 1.2 底层原理 1.3 IOC容器 1.4 Bean管理:基于xml配置文件实现 1.5 两种类型的Bean 1.6 Bean的作用域 1.7 Bean的生命周期 1 ...
- spring中IoC和AOP的实现
6.2 spring IoC IoC容器是Spring的核心.容器从配置文件中读取需要创建哪些对象,并在创建后按照要求把它们进行装配,通过这样的方法达到业务代码解耦的目的.不仅如此,spring还负责 ...
- Java 第一大框架:Spring 的 IoC 跟 AOP 雏形如何实现?
Spring Spring make java more simple: Spring make java more modern: Spring make java more reactive: S ...
- Spring框架(IoC、AOP面向接口切面)
新建一个Maven工程 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发. ...
最新文章
- python使用正则表达式抽取字符串中最大数值数字
- jAvA中deprecate,在Java中使用Deprecated方法或类是错误的吗?
- 写在开通博客的第一天
- direct.h头文件(对目录操作)
- sql join 示例_SQL CROSS JOIN与示例
- verilog 生成块_Verilog数字系统设计教程之学习摘要
- CCF NOI1115 找数
- 基金会总线协议分析(FF协议)
- AAAI2021联邦学习论文集
- 图片Base64解码
- 计算机无法启动鼠标键盘没反应,电脑开机后鼠标键盘没反应怎么办
- ACM——01——1003: 【入门】求任意三位数各个数位上数字的和 【运算符】
- 工作这么多年,所经历5个骗子上司
- 清除阿里云服务器挖矿程序过程
- h5根据手机尺寸调整字体大小
- JetBrains历史版本下载
- 在HTML中把文本变成斜体的是,CSS/HTML:什么是使文本斜体的正确方法?
- 电子商务平台入驻宁夏
- Day13-Java方法详解,方法的定义、重载,命令行传参,可变参数与递归
- 我的奇思妙想机器人消防员_我的奇思妙想多功能机器人作文400字