前言
上篇文章讲了关于Spring IoC的一些知识,【Ioc】从0开始学习Spring---IoC的相关知识(1)-CSDN博客这篇文章综合谈谈Spring的另外两个核心功能:AOP(面向切面编程)以及Spring JDBC。
1.Spring AOP是什么?为什么那些Java大神会想到发明一个这种功能?
Spring AOP(面向切面编程)是Spring框架中的一个关键特性,它允许开发人员将横切关注点(如日志记录、事务管理、安全性等)与主要业务逻辑分离出来,从而提高代码的可读性、可维护性和可重用性。
让我们通过一个NBA的例子来说明为什么需要Spring AOP:
假设我们有一个NBA球队管理系统,其中球队需要记录球员的训练时间。我们可以编写一个LoggingAspect,使用Spring AOP将日志记录的逻辑与训练业务逻辑分离开来。
首先,我们定义一个Player类表示球员:
然后,我们定义一个LoggingAspect类作为日志记录的切面:
在上述代码中,我们使用了Spring AOP的注解方式来定义一个切面。在LoggingAspect类中,我们使用@Before注解来指定在Player类的train()方法执行之前执行日志记录的逻辑。
接下来,我们需要配置Spring容器来启用AOP:
在上述配置中,我们使用aop:aspectj-autoproxy/标签来启用Spring AOP。然后,我们定义了Player和LoggingAspect的bean。
现在,当我们调用球员的train()方法时,日志记录的逻辑会自动执行:
输出结果将是:
通过使用Spring AOP,我们成功地将日志记录的横切关注点与主要业务逻辑分离开来。这样,无论是何时训练球员,日志记录的逻辑都会自动应用,而不需要在每个训练方法中重复编写日志记录代码。
2.解释一下Spring AOP和AspectJ这个概念的区别?
AspectJ是一种支持面向切面编程(AOP)的编程语言和框架。它是在Java语言基础上扩展的一种领域特定语言(DSL),提供了更强大和灵活的AOP功能。AspectJ可以与Java语言无缝集成,可以在编译时或运行时织入切面,以实现横切关注点的模块化和重用。
AspectJ提供了一套丰富的语法和关键字,用于描述切面、切点、通知等AOP相关的概念。
通过使用AspectJ,开发人员可以更方便地实现横切关注点的功能,如日志记录、事务管理、安全性检查、性能监控等。
AspectJ可以与Java代码一起编译,可以使用AspectJ编译器将AspectJ源文件编译为Java字节码文件,然后与其他Java类一起进行部署和执行。
3.讲一讲Spring AOP的5个关键概念?
4.Spring JDBC是什么?之前在Javaweb中讲过JDBC,为什么在spring中又要搞一个Spring JDBC?
在JavaWeb开发中,JDBC是用于与关系型数据库进行交互的标准API。它提供了一组接口和类,用于执行SQL语句、管理数据库连接、处理结果集等操作。JDBC是Java开发中与数据库交互的基础,但在实际使用中,使用原生的JDBC可能存在一些繁琐和冗余的代码。
Spring JDBC是Spring框架提供的一个模块,它在JDBC的基础上进行了封装和增强,旨在简化数据库访问的代码编写和管理。
5.Spring JDBC的使用步骤是什么?
(1)Maven工程引入依赖spring-jdbc
(2)applicationContext.xml配置DataSource数据源
(3)在Dao中注入JdbccTemplate对象,实现数据CRUD
6.讲一讲Spring事务管理?
7.简单讲讲编程式事务管理和声明式事务管理?
编程式事务管理需要在代码中显式地编写事务管理代码,更加灵活,适用于需要细粒度控制事务的场景。
声明式事务管理通过配置文件或注解的方式来定义事务的边界和属性,实现了事务管理与业务代码的分离,更加方便和易于维护。适用于大多数简单的事务场景。
后记
至此,关于Spring的知识点就差不多讲完了,其实大家可以看到我这两篇文章并不是讲的很深入,因为其实我觉得大家第一次去学这个东西是没必要学这么深的,倒不是说Spring不重要,而是说这是我学习的一个理念,就是说第一次学习大概知道这是什么,有个印象就好,因为你不可能看几篇文章你就彻底理解这个知识点,这也是为什么我一直觉得那种什么《一篇带你彻底理解**》是很扯淡的。你想想,那些大神花了好几十年的时间研究了这么一个设计思路,你看一篇文章一两分钟就彻底理解了?真正想要理解,肯定是通过日后你慢慢接触到项目,项目里确实用到了这个东西,你对这个东西的印象才会更加深刻!