IOC(要做到编译期不依赖,运行期才依赖)

传统模式
Spring的处理方式
采用了工厂模式,降低了类之间的耦合度

基于动态代理增强代码功能,降低了业务模块之间的耦合度,有两种代理方式:

  1. JDK动态代理 (基于接口的动态代理)
  2. 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原理及其使用相关推荐

  1. 初学者快速了解spring的IOC和AOP原理

    spring框架概述 1.spring是轻量级的开源的javaEE框架 2.spring可以解决企业应用开发的复杂性 3.spring有两个核心部分:IOC和AOP (1)IOC:控制反转,把创建对象 ...

  2. 【Spring 源码阅读】Spring IoC、AOP 原理小总结

    Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...

  3. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  4. Spring:IOC和AOP

    Spring:IOC和AOP 一. IOC (1) 引入 (2) 定义 (3) 作用 (4) 实现 (5) DI依赖注入 二. AOP (1) 概念 (2) Spring中的AOP (3) 入门案例 ...

  5. Spring总结(IOC、AOP原理以及Spring事务)

    一.概述 1.Spring是一个开源免费且轻量级的框架 , 非侵入式的 . 2.控制反转 IoC , 面向切面 Aop 3 .对事物的支持 , 对框架的支持 一句话概括: Spring 是一个轻量级的 ...

  6. 重新学习Spring2——IOC和AOP原理彻底搞懂

    一.AOP 1 Spring AOP 的实现原理 是对OOP编程方式的一种补充.翻译过来为"面向切面编程". 1 AspectJ是静态代理的增强:所谓静态代理就是AOP框架会在便一 ...

  7. 彻底学会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 ...

  8. spring中IoC和AOP的实现

    6.2 spring IoC IoC容器是Spring的核心.容器从配置文件中读取需要创建哪些对象,并在创建后按照要求把它们进行装配,通过这样的方法达到业务代码解耦的目的.不仅如此,spring还负责 ...

  9. Java 第一大框架:Spring 的 IoC 跟 AOP 雏形如何实现?

    Spring Spring make java more simple: Spring make java more modern: Spring make java more reactive: S ...

  10. Spring框架(IoC、AOP面向接口切面)

    新建一个Maven工程 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务器端的开发. ...

最新文章

  1. python使用正则表达式抽取字符串中最大数值数字
  2. jAvA中deprecate,在Java中使用Deprecated方法或类是错误的吗?
  3. 写在开通博客的第一天
  4. direct.h头文件(对目录操作)
  5. sql join 示例_SQL CROSS JOIN与示例
  6. verilog 生成块_Verilog数字系统设计教程之学习摘要
  7. CCF NOI1115 找数
  8. 基金会总线协议分析(FF协议)
  9. AAAI2021联邦学习论文集
  10. 图片Base64解码
  11. 计算机无法启动鼠标键盘没反应,电脑开机后鼠标键盘没反应怎么办
  12. ACM——01——1003: 【入门】求任意三位数各个数位上数字的和 【运算符】
  13. 工作这么多年,所经历5个骗子上司
  14. 清除阿里云服务器挖矿程序过程
  15. h5根据手机尺寸调整字体大小
  16. JetBrains历史版本下载
  17. 在HTML中把文本变成斜体的是,CSS/HTML:什么是使文本斜体的正确方法?
  18. 电子商务平台入驻宁夏
  19. Day13-Java方法详解,方法的定义、重载,命令行传参,可变参数与递归
  20. 我的奇思妙想机器人消防员_我的奇思妙想多功能机器人作文400字

热门文章

  1. Baxter 机器人仿真软件安装及演示
  2. imx6ull设备树
  3. 十大气势背景音乐(适合战队,广告招商会场用)
  4. Print Screen sysRa PrtSc
  5. Laravel框架教程 入门篇(一)
  6. java Swing+mysql实现的家庭收支管理系统(个人收支录入和查询)
  7. php油酸诱导剂,油酸诱导建鲤(Cyprinus carpio var. Jian)肝细胞脂肪变性模型的建立
  8. java语言搭建app后台入门
  9. [Android] 选项卡组件TabHost
  10. Mac开发者福利来了!安利一波各领域不错的软件工具