spring Aop 面向切面编程简单实例

简介: spring Aop 面向切面编程简单实例

最近画了一点时间研究了一下spring的aop,接下来就先直接放源码:


首先创建一个教师Teacher接口:


package com.sise.aop;
public interface Teacher {
    public void teach();
}
复制代码


然后是一个教师类:


package com.sise.aopimpl;
import com.sise.aop.Teacher;
public class TeacherImpl implements Teacher{
    @Override
    public void teach() {
        // TODO Auto-generated method stub
        System.out.println("教师开始教课");
    }
}
复制代码


然后再是写一个学生类:


package com.sise.aopimpl;
public class Student {
    public Student() {
        // TODO Auto-generated constructor stub
    }
    public void seats()
    {
        System.out.println("学生回到教室");   
    }
    public void sayhello()
    {
        System.out.println("向老师问好");
    }
    public void ask()
    {
        System.out.println("上课提问");
    }
    public void endclass()
    {
        System.out.println("下课了");
    }
}
复制代码


接下来我们希望在做后期维护的时候能够在教师执行teach方法之前执行student类里面的seats和sayhello方法,在教师执行完teach方法之后执行endclass方法。对于这种情况,在spring里面提供了一种叫做aop的方法来执行;


以下是我的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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/aop   
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
    xmlns:aop="http://www.springframework.org/schema/aop"
    >  
    <!-- 配置需要被Spring管理的Bean(创建,创建后放在了Spring IOC容器里面)-->
    <!-- 表演者 -->
    <bean id="TeacherImpl" class="com.sise.aopimpl.TeacherImpl"/>  
    <!-- 观众 -->  
    <bean id="Student" class="com.sise.aopimpl.Student"></bean>  
    <!-- 为接口类设置切点 -->  
    <aop:config proxy-target-class="true">
        <aop:aspect ref="Student">  
            <!-- 之前 -->  
            <aop:before pointcut="execution(* com.sise.aopimpl.TeacherImpl.teach(..))" method="seats"/>  
            <!-- 之前 -->  
            <aop:before pointcut="execution(* com.sise.aopimpl.TeacherImpl.teach(..))" method="sayhello"/>  
            <!-- 之后 -->  
            <aop:after-returning pointcut="execution(* com.sise.aopimpl.TeacherImpl.teach(..))" method="ask"/>  
            <!-- 之后 -->  
            <aop:after-throwing pointcut="execution(* com.sise.aopimpl.TeacherImpl.teach(..))" method="endclass"/>  
        </aop:aspect>  
    </aop:config>  
</beans>
复制代码


beans.xml所放置的位置如下图所示:


网络异常,图片无法展示
|


接下来在一个便是测试部分的代码:


package com.sise.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sise.aopimpl.TeacherImpl;
public class Test {
    public static void main(String[] args)
    {
        ApplicationContext apc=new ClassPathXmlApplicationContext("beans.xml");
        TeacherImpl teacher=(TeacherImpl) apc.getBean("TeacherImpl");
        teacher.teach();
    }
}
复制代码


最后是运行结果的截图:


网络异常,图片无法展示
|

目录
相关文章
|
2月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
350 0
|
3月前
|
Java API 开发者
Spring 控制反转与依赖注入:从玄学编程到科学管理
在传统开发中,手动`new`对象导致紧耦合、难以维护和测试。控制反转(IoC)将对象创建交给框架,实现解耦。Spring通过IOC容器自动管理对象生命周期,开发者只需声明依赖,无需关心创建细节。依赖注入(DI)是IoC的具体实现方式,支持构造器、Setter和字段注入。构造器注入推荐使用,保证依赖不可变且易于测试。对于多个同类型Bean,可用`@Qualifier`或`@Primary`解决冲突。此外,Spring还支持依赖查找(DL),开发者主动从容器获取Bean,适用于动态场景,但侵入性强。掌握IoC与DI,有助于构建灵活、可维护的Spring应用。
|
16天前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
3月前
|
人工智能 监控 安全
Spring AOP切面编程颠覆传统!3大核心注解+5种通知类型,让业务代码纯净如初
本文介绍了AOP(面向切面编程)的基本概念、优势及其在Spring Boot中的使用。AOP作为OOP的补充,通过将横切关注点(如日志、安全、事务等)与业务逻辑分离,实现代码解耦,提升模块化程度、可维护性和灵活性。文章详细讲解了Spring AOP的核心概念,包括切面、切点、通知等,并提供了在Spring Boot中实现AOP的具体步骤和代码示例。此外,还列举了AOP在日志记录、性能监控、事务管理和安全控制等场景中的实际应用。通过本文,开发者可以快速掌握AOP编程思想及其实践技巧。
|
10月前
|
人工智能 Java API
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
434 2
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
|
8月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器使用实例
本文主要讲解了Spring Boot中拦截器的使用实例,包括判断用户是否登录和取消特定拦截操作两大场景。通过token验证实现登录状态检查,未登录则拦截请求;定义自定义注解@UnInterception实现灵活取消拦截功能。最后总结了拦截器的创建、配置及对静态资源的影响,并提供两种配置方式供选择,帮助读者掌握拦截器的实际应用。
260 0
|
10月前
|
XML 监控 前端开发
Spring Boot中的WebFlux编程模型
Spring WebFlux 是 Spring Framework 5 引入的响应式编程模型,基于 Reactor 框架,支持非阻塞异步编程,适用于高并发和 I/O 密集型应用。本文介绍 WebFlux 的原理、优势及在 Spring Boot 中的应用,包括添加依赖、编写响应式控制器和服务层实现。WebFlux 提供高性能、快速响应和资源节省等优点,适合现代 Web 应用开发。
1074 15
|
11月前
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
148 2
一键注入 Spring 成员变量,顺序编程
|
Java 数据库连接 Spring
【2021Spring编程实战笔记】Spring开发分享~(下)
【2021Spring编程实战笔记】Spring开发分享~(下)
115 1