简述网站建设的基本流程图,外贸用什么网站开发客户,wordpress 浮动窗口插件,cms网站开发框架#x1f9f8;安清h#xff1a;个人主页 #x1f3a5;个人专栏#xff1a;【计算机网络】【Mybatis篇】【Spring篇】
#x1f6a6;作者简介#xff1a;一个有趣爱睡觉的intp#xff0c;期待和更多人分享自己所学知识的真诚大学生。
目录
#x1f3af;初始Sprig AOP及… 安清h个人主页 个人专栏【计算机网络】【Mybatis篇】【Spring篇】
作者简介一个有趣爱睡觉的intp期待和更多人分享自己所学知识的真诚大学生。
目录
初始Sprig AOP及术语
基于XML的AOP实现
配置Spring AOP的XML元素
✨配置切面
✨配置切入点
示例
✨创建UserDao类
✨创建UserDaoImpl类
✨创建XmlAdvice类
✨applicationContext-xml.xml文件
✨创建测试类
基于注解的AOP实现
Spring提供的注解
代码示例
✨创建UserDao类
✨创建UserDaoImpl类
✨创建AnnoAdvice类
✨applicationConext.xml文件
✨创建测试类 初始Sprig AOP及术语
Spring AOPAspect-Oriented Programming面向切面编程是Spring框架中的一个核心模块它允许开发者将横切关注点如日志、事务管理、安全等从业务逻辑中分离出来以提高代码的模块化和可重用性。以下是一些Spring AOP中常用的术语根据例子来展示其用法 LogUtils中的printLog()方法用来输出日志
需求针对UserService的save和delete方法做日志输出的增强 Join Point连接点能够被增强的叫做连接点。特指的是类中的方法以上四个任何一个方法都可以被叫做连接点 Pointcut切入点将要被增强的方法。一个切入点一定是一个连接点但是一个连接点并不一定是一个切入点。在例子中save()和delete()为切入点。 Advice增强/通知将要增强的功能所在的方法。例子中由于要对save和delete方法做日志的增强所以printLog方法叫做增强advice。 Aspect切面用来配置切入点和增强关系的。 Target 目标对象指的是将要被增强的方法所在的对象。例子中UserService对象就是Target对象。 Weaving织入将增强运用到切入点的过程叫做织入。 Proxy代理将增强运用到切入点之后形成的对象叫做代理对象。 基于XML的AOP实现
Spring中AOP的代理对象是由IOC容器自动生成所以开发者只需选择选择连接点创建切面定义切点并在XML中添加配置信息即可。Spring提供了一系列配置Spring AOP的XML元素。
AOP配置在切面中配置切入点和增强的关系
配置Spring AOP的XML元素
元素描述aop:configSpring AOP配置的根元素aop:aspect配置切面aop:pointcut配置切入点aop:before定义一个前置通知aop:after定义一个后置通知aop:after-returning定义一个返回后通知aop:around定义一个环绕通知
✨配置切面
在定义aop:aspect元素时通常会指定idref这两个属性。
属性名称描述id用于定义切面的唯一标识切面起的名字可以不设置ref用于引用普通的Spring Bean引用的切面类对象bean的id值
✨配置切入点
在定义aop:pointcut元素时通常会指定idexpression这两个属性。
属性名称描述id用于指定切入点的唯一标识expression用于指定切入点关联的切入点的表达式 示例
✨创建UserDao类
定义了用户数据操作的接口包括增删改查四个方法。
public interface UserDao {public void insert();public void delete();public void update();public void select();
}
✨创建UserDaoImpl类
实现了UserDao接口具体执行数据库操作的打印语句。
public class UserDaoImpl implements UserDao{Overridepublic void insert() {System.out.println(添加用户信息);}Overridepublic void delete() {System.out.println(删除用户信息);}Overridepublic void update() {System.out.println(修改用户信息);}Overridepublic void select() {System.out.println(查询用户信息);}
}
✨创建XmlAdvice类
定义了AOP切面包含前置、后置、环绕、返回和异常通知方法。
public class XmlAdvice {// 前置通知public void before(JoinPoint joinPoint) {System.out.println(这是前置方法);System.out.println(目标类是 joinPoint.getTarget());System.out.println(被织入增强处理的目标方法为 joinPoint.getSignature().getName());}// 返回通知public void afterReturning(JoinPoint joinPoint) {System.out.println(这是返回通知方法不出现异常时调用);System.out.println(被织入增强处理的目标方法为 joinPoint.getSignature().getName());}// 环绕通知public Object around(ProceedingJoinPoint point) throws Throwable {System.out.println(这是环绕之前的通知);Object object point.proceed();System.out.println(这是环绕之后的通知);return object;}// 异常通知public void afterException() {System.out.println(异常通知!);}// 后置通知public void after() {System.out.println(这是后置通知);}
}✨applicationContext-xml.xml文件
Spring配置文件配置了数据源、事务管理器、UserDaoImpl和XmlAdvice的Bean并定义了AOP的切点和通知。
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:aophttp://www.springframework.org/schema/aopxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdaop:aspectj-autoproxy/context:component-scan base-packagecom.xml/bean iduserDao classcom.xml.UserDaoImpl/bean idxmlAdvice classcom.xml.XmlAdvice/aop:configaop:pointcut idpointcut expressionexecution(* com.xml.UserDaoImpl.*(..))/aop:aspect refxmlAdviceaop:before methodbefore pointcut-refpointcut/aop:after-returning methodafterReturning pointcut-refpointcut/aop:around methodaround pointcut-refpointcut/aop:after-throwing methodafterException pointcut-refpointcut/aop:after methodafter pointcut-refpointcut//aop:aspect/aop:config
/beans
✨创建测试类
测试类通过Spring容器获取UserDao的Bean并调用其方法来验证AOP功能是否正常工作。
public class TestXml {public static void main(String[] args) {ApplicationContext applicationContext new ClassPathXmlApplicationContext(applicationContext-xml.xml);UserDao userDao applicationContext.getBean(userDao, UserDao.class);userDao.delete();System.out.println();userDao.insert();System.out.println();userDao.select();System.out.println();userDao.update();}
}这是部分运行出来的结果由于过长所以在这里只截取了delete部分的作为参考 基于注解的AOP实现
Spring提供的注解
注解名称描述Aspect配置切面Pointcut配置切入点Before配置前置通知After配置后置通知Around配置环绕通知AfterReturning配置返回通知AfterThrowing配置异常通知
下面将通过一个示例来展现
代码示例
✨创建UserDao类
声明用户数据操作的接口
public interface UserDao {public void insert();public void delete();public void update();public void select();
}
✨创建UserDaoImpl类
实现UserDao接口标注为Spring管理的Bean并定义基本的数据库操作打印语句。
Component(userDao)
public class UserDaoImpl implements UserDao{Overridepublic void insert() {System.out.println(添加用户信息);}Overridepublic void delete() {System.out.println(删除用户信息);}Overridepublic void update() {System.out.println(修改用户信息);}Overridepublic void select() {System.out.println(查询用户信息);}
}✨创建AnnoAdvice类
定义切面包括前置、后置、环绕、返回和异常通知用于增强UserDaoImpl类的方法
Aspect //告诉Spring这个东西是用来做AOP的
public class AnnoAdvice {//切点Pointcut(execution(* com.xml.UserDaoImpl.*(..)))public void pointcut(){}//前置通知Before(pointcut()) //切入点和通知的绑定public void before(JoinPoint joinPoint){System.out.println(这是前置通知);System.out.println(目标类是joinPoint.getTarget());System.out.println(被织入增强处理的目标方法为joinPoint.getSignature().getName());}//返回通知AfterReturning(pointcut())public void afterReturning(JoinPoint joinPoint){System.out.println(这是返回通知);System.out.println(被织入增强处理的目标方法为joinPoint.getSignature().getName());}//环绕通知Around(pointcut())public Object around(ProceedingJoinPoint point) throws Throwable {System.out.println(这是环绕通知之前的部分);Object objectpoint.proceed();System.out.println(这是环绕通知之后的部分);return object;}//异常通知AfterThrowing(pointcut())public void afterException(){System.out.println(这是异常通知);}//后置通知After(pointcut())public void after(){System.out.println(这是后置通知);}
}
✨applicationConext.xml文件
配置Spring的AOP命名空间、组件扫描和切面相关的Bean定义
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:aophttp://www.springframework.org/schema/aopxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsdaop:aspectj-autoproxy/context:component-scan base-packagecom.xml/bean idannoAdvice classcom.xml.AnnoAdvice/
/beans
✨创建测试类
通过Spring容器获取UserDao的Bean并调用其方法预期将触发AnnoAdvice中定义的AOP通知
public class TestAnnotation {public static void main(String[]args){ApplicationContext applicationContextnew ClassPathXmlApplicationContext(applicationContext.xml);UserDao userDaoapplicationContext.getBean(userDao, UserDao.class);userDao.delete();System.out.println();userDao.insert();System.out.println();userDao.select();System.out.println();userDao.update();}
} 以上就是今天要讲的内容了主要讲解了Spring AOP的术语及其两种实现方式等相关内容如果您感兴趣的话可以订阅我的相关专栏。非常感谢您的阅读如果这篇文章对您有帮助那将是我的荣幸。我们下期再见啦