Spring核心机制IoC与AoP梳理

文章目录

    • Spring核心机制IoC与AoP梳理
  • IoC介绍
  • IoC案例介绍
    • pom文件中IoC环境引入
    • 自己new对象方法举例(正转)
    • IoC创建对象
      • 基于XML方法
      • 基于注解方式
    • IoC依赖注入
  • AoP介绍
    • AoP术语:
    • AoP实现

IoC介绍

控制反转(Inversion of Control),IOC 不是一种技术,而是一种设计思想,IoC 是 Spring 全家桶各个功能模块的基础,创建对象的容
器。
控制反转,将对象的创建进行反转,常规情况下,对象都是
开发者手动创建的,使用 IoC 开发者不再需要创建对象,而
是由 IoC 容器根据需求自动创建项目所需要的对象。

IoC案例介绍

pom文件中IoC环境引入

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.15</version>
</dependency

自己new对象方法举例(正转)

创建一个类:

@Data
public class DataConfig {private String url;private String driverName;private String username;private String password;

测试使用常规方法:

IoC创建对象

基于XML方法

开发者把需要的对象在 XML 中进行配置,Spring框架读取这个配置文件,根据配置文件的内容来创建对象。(不常用)
配置文件在resources里进行创建。
配置文件取名:applicationcontext,springioc,或者其他 无所谓

首先在配置文件中进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/be
ans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"xmlns:context="http://www.springframework.org/s
chema/context"xmlns:aop="http://www.springframework.org/schem
a/aop"xmlns:p="http://www.springframework.org/schema/
p"xsi:schemaLocation="http://www.springframework.
org/schema/beanshttp://www.springframework.org/schema/beans/spr
ing-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/s
pring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/sprin
g-aop-4.3.xsd"><bean class="com.southwind.ioc.DataConfig"
id="config"><property name="driverName" value="Driver"></property><property name="url" value="localhost:8080"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean>
</beans>

测试使用:

public class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");//ioc容器System.out.println(context.getBean("config"));//和配置文件里面id对应}
}

基于注解方式

  1. 配置类方法
    用一个 Java 类来替代 XML 文件,把在 XML 中配置的内容放到配置类中。
    首先创建一个配置类:
@Configuration//加这个注解证明是配置类
public class BeanConfiguration {@Beanpublic DataConfig dataConfig(){DataConfig dataConfig = new DataConfig();dataConfig.setDriverName("Driver");dataConfig.setUrl("localhost:3306/dbname");dataConfig.setUsername("root");dataConfig.setPassword("root");return dataConfig;}
}

测试使用:

ApplicationContext context = new
AnnotationConfigApplicationContext(BeanConfiguration.class);
//实现类和上面不一样//通过包名也可以加载它
System.out.println(context.getBean("dataConfig"));
//通过方法名获取bean
  1. 扫包+注解
    更简单的方式,不再需要依赖于 XML 或者配置类,而是直接将 bean 的创建交给目标类,在目标类添加注解来创建。

首先:

@Data
@Component//告诉spring框架,这个类需要被注入到Ioc的
public class DataConfig {@Value("localhost:3306")private String url;@Value("Driver")private String driverName;@Value("root")private String username;@Value("root")private String password;
}

测试使用:

ApplicationContext context = new
AnnotationConfigApplicationContext("com.southwi
nd.ioc");//告诉包名
System.out.println(context.getBean(DataConfig.c
lass));//通过类型

IoC依赖注入

a里面有个b的对象,创建a b两个对象,自动的把b装到a里面

@Data
@Component
public class GlobalConfig {@Value("8080")private String port;@Value("/")private String path;@Autowiredprivate DataConfig dataConfig;
}

@Autowired 通过类型进行注入,如果需要通过名称取值,
通过 @Qualifier 注解完成名称的映射

Data
@Component
public class GlobalConfig {@Value("8080")private String port;@Value("/")private String path;@Autowired@Qualifier("config")private DataConfig config;
}
@Data
@Component("config")
public class DataConfig {@Value("localhost:3306")private String url;@Value("Driver")private String driverName;@Value("root")private String username;@Value("root")private String password;
}

测试使用:

ApplicationContext context = new
AnnotationConfigApplicationContext(com.southwind.ioc);
//实现类和上面不一样//通过包名也可以加载它
System.out.println(context.getBean("GlobalConfig.class"));

AoP介绍

面向切面编程,是一种抽象化的面向对象编程,对面向对象编程的一种补充,底层使用动态代理机制来实现。
1、打印日志(常用)
2、事务
3、权限处理
一句话介绍:做到核心业务和非业务代码的解耦合,提高程序的可重用性,同时提高了开发的效率。

AoP术语:

  1. 连接点
    类里面哪些方法可以被增强,这些方法称为连接点

  2. 切入点
    实际被真正增强的方法,称为切入点

  3. 增强(通知)
    实际增加的逻辑部分称为通知(增强)
    通知有多种类型:
    前置通知
    后置通知
    环绕通知
    异常通知
    最终通知

  4. 切面(过程)
    把通知应用到切入点的过程,就叫切面

AoP实现

底层通过动态代理

1.先引入切面依赖

2.创建切面类

@Component
@Aspect
public class LoggerAspect {@Before("execution(public int com.southwind.aop.CalImpl.*(..))")public void before(JoinPoint joinPoint){String name =joinPoint.getSignature().getName();System.out.println(name+"方法的参数是"+Arrays.toString(joinPoint.getArgs()));}@AfterReturning(value = "execution(public int com.southwind.aop.CalImpl.*(..))",returning = "result")public void afterReturning(JoinPoint joinPoint,Object result){String name =joinPoint.getSignature().getName();System.out.println(name+"方法的结果是"+result);}
}//after 注解拿不到结果 ,要想拿结果用afterreturning

3.配置自动扫包+开启代理
配置文件里:

 <context:component-scan base-package="com.southwind.aop"></context:component-scan><!-- 开启自动生成代理 --><aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

4.使用:

public class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");Cal bean = context.getBean(Cal.class);//用接口去取System.out.println(bean.add(9, 8));System.out.println(bean.sub(9, 8));System.out.println(bean.mul(9, 8));System.out.println(bean.div(9, 8));}
}

Spring核心机制IoC与AoP梳理相关推荐

  1. 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  2. spring框架两大核心:IOC和AOP的详解

    目录 一.IOC和AOP的介绍 二.IOC 1.IOC初始化属性的方式 1.使用构造方法完成属性初始化 2.使用type数据类型完成属性初始化 3.使用p命名空间初始化对象 4.使用c命名空间初始化对 ...

  3. Spring 原理初探——IoC、AOP

    前言 众所周知, 现在的 Spring 框架已经成为构建企业级 Java 应用事实上的标准了,众多的企业项目都构建在 Spring 项目及其子项目之上,特别是 Java Web 项目. Spring ...

  4. spring核心之IOC

    spring IOC   控制反转    核心思想 了解IOC,首先需要了解DI  --- 软件设计的重要思想            依赖注入 什么事依赖注入呢? 例子:设计行李箱类 传统写法:首先设 ...

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

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

  6. 谈谈Spring中的IOC和AOP概念 - 倪升武的博客 - CSDN博客

    转载于https://blog.csdn.net/eson_15/article/details/51090040 IOC和AOP是Spring中的两个核心的概念,下面谈谈对这两个概念的理解. 1. ...

  7. 认识Spring核心容器IoC/DI

    对于 Java 编程来说,使用 Spring 能完成的更加快速,更容易并更安全.Spring 专注于速度,便捷与开发效率,也正是如此,让Spring成为了全世界最流行的 Java 框架.从配置到安全, ...

  8. Spring中的IOC和AOP是什么意思?

    (1) Spring是什么? IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AO ...

  9. Spring 面试之IoC 和 AOP

    Spring IoC 什么是IoC Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象 ...

最新文章

  1. 震惊!线上四台机器同一时间全部 OOM,到底发生了什么?
  2. 使用 SCons 轻松建造程序
  3. 安装Qt creator时出现 无法定位程序输入点_except1 于动态链接库MSVCR120.dll上
  4. robots.txt网站爬虫文件设置
  5. Python实战1- 图片转字符画
  6. java属于什么行业,吐血整理
  7. html使用js的变量_2、温故而知新,再学一遍JavaScript-html中如何使用JS
  8. [弹性力学]应力转轴公式和应变转轴公式的展开式
  9. 卸任四家锤子公司法定代表人后:罗永浩退出聊天宝股东行列
  10. Linux下安装informix11.5数据库
  11. 洛谷P1088 火星人__(作业)
  12. 开源 免费使用 打包下载 自行部署 :升讯威 周报系统 2.0 最新版
  13. STM32中大小端转换
  14. MDI Jade6.5安装教程-附安装包
  15. np.array()函数
  16. 最新微信域名防封_微信二级不死域名真的不死吗
  17. 科普丨什么是语言?什么是自然语言?
  18. 什么是肿瘤伴随诊断行业?
  19. 【青少年编程】【二级】小瓢虫找妈妈
  20. ⑲云上场景:超级减肥王,基于OSS的高效存储实践

热门文章

  1. 实用教程|快速搭建自动导航机器人(一)
  2. 190403内置模块
  3. 【Django】 终端打印出错信息
  4. 三、Bugku----手机热点------流量分析题------obex
  5. jQuery 下载保存图片的方法
  6. properties文件的用法;utils类封装数据库连接、资源关闭、通用的增删改,以及两种通用的查询方法
  7. java 小球抛物线_小球抛物线运动
  8. matlab三点确定抛物线,[转]matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...
  9. 5G中的一些简写和缩略语含义
  10. 双色球,抽奖是否中奖