SSM-Spring-03:Spring中AOP的初窥和入门小案例

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     AOP:面向切面编程   AOP的主要作用:是为了程序员更好的关注"业务",专心"做事"     加上双引号的意思:所谓业务,是指他的核心,各行业中需要处理的核心事务,核心啊     ...

 

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

 

AOP:面向切面编程

  AOP的主要作用:是为了程序员更好的关注"业务",专心"做事"

    加上双引号的意思:所谓业务,是指他的核心,各行业中需要处理的核心事务,核心啊

    像日志的记录,事务的管理,权限分配等这些交叉业务,同一个项目中使用多次,直接提取出来成为公共的比较好,再用面向切面的方式,进行代码的编辑,业务的实现

  AOP的思想:

    

    正如上图所示的,最基本的方式实现的业务和AOP方式实现的业务,是不同的,或许你会说,我在没有aop的时候,我也不像上面那个最low的方式一样啊,是,有比那个最low的方式好的多的是,我们要学习新的思想,aop,面向切面编程

  AOP的原理

    

 

--------------------------------------------------------------------------------------------------------------------------------

入门案例:

  用最基本的方式模拟一道日志的记录和最后执行完业务的操作

    DAO层(一个接口,一个他的实现类,模拟操作修改数据库)

 

package cn.dawn.day04aop.dao;

/**
 * Created by Dawn on 2018/3/5.
 */
/*dao层接口*/
public interface IHellowDAO {
    /*aop入门案例*/
    public void doSome();
}


package cn.dawn.day04aop.dao.impl;

import cn.dawn.day04aop.dao.IHellowDAO;

/**
 * Created by Dawn on 2018/3/5.
 */
/*dao层实现类*/
public class HellowDAOImpl implements IHellowDAO{

    public void doSome() {
        System.out.println("数据已经成功写入到DB");
    }
}

 

    service层(也是一个接口,一个实现类,主要做的aop的增强操作,操作的是service层,业务逻辑处理层操作的)

 

package cn.dawn.day04aop.service;

/**
 * Created by Dawn on 2018/3/5.
 */
/*service层接口*/
public interface IHellowService {
    /*aop入门案例*/
    public void doSome();
}




package cn.dawn.day04aop.service.impl;

import cn.dawn.day04aop.dao.IHellowDAO;
import cn.dawn.day04aop.service.IHellowService;

/**
 * Created by Dawn on 2018/3/5.
 */
/*service层实现类 */
public class HellowServiceImpl implements IHellowService {
    IHellowDAO dao;
    public void doSome() {
        dao.doSome();
    }

    public IHellowDAO getDao() {
        return dao;
    }

    public void setDao(IHellowDAO dao) {
        this.dao = dao;
    }
}

 

    新开多的一层,叫aop层,他就存放了增强的操作(也就是交叉业务,例如日志记录等),此处我放了俩个类,一个执行前置增强,一个后置增强

 

package cn.dawn.day04aop.aop;


import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

/**
 * Created by Dawn on 2018/3/5.
 */
/*前置增强*/
public class LoggerBefore implements MethodBeforeAdvice {
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("日志记录");
    }
}







package cn.dawn.day04aop.aop;

import org.springframework.aop.AfterReturningAdvice;

import java.lang.reflect.Method;

/**
 * Created by Dawn on 2018/3/5.
 */
/*后置增强*/
public class LoggerAfter implements AfterReturningAdvice {
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("===============after==================");
    }
}

 

    前置增强,需要实现MethodBeforeAdvice,后置增强,需要实现AfterReturningAdvice

 

    接下来就是书写大配置xml文件

       有个注意的点,由于我用的idea,他会自动生成上面的beans的 xmlns和xsi,如果你不是用idea的话,手动配置一道吧

 

<?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:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--aop入门案例起-->
    <!--dao-->
    <bean id="dao" class="cn.dawn.day04aop.dao.impl.HellowDAOImpl"></bean>
    <!--service-->
    <bean id="service" class="cn.dawn.day04aop.service.impl.HellowServiceImpl">
        <property name="dao" ref="dao"></property>
    </bean>
    <!--通知-->
    <bean id="afterAdvice" class="cn.dawn.day04aop.aop.LoggerAfter"></bean>
    <bean id="beforeAdvice" class="cn.dawn.day04aop.aop.LoggerBefore"></bean>
    <!--aop-->
    <aop:config>
        <!--切点-->
        <aop:pointcut id="mypointcut" expression="execution(* *..service.*.*(..))"></aop:pointcut>
        <!--<aop:pointcut id="mypointcut" expression="execution(public void cn.dawn.day04aop.service.IHellowService.doSome())"></aop:pointcut>-->
        <!--<aop:pointcut id="mypointcut" expression="execution(* *..service.*.*(..))">-->
        <!--顾问,织入-->
        <aop:advisor advice-ref="beforeAdvice" pointcut-ref="mypointcut"></aop:advisor>
        <aop:advisor advice-ref="afterAdvice" pointcut-ref="mypointcut"></aop:advisor>
    </aop:config>
    <!--aop入门案例完毕-->
</beans>

 

    这儿有一个切点pointcut,我说一下他的expression的属性吧,他就是里面放一个匹配的(可以说叫公式?)方法的公式

    他的使用规则我放在下面

              

    接下来单测方法

 

package cn.dawn.day04aop;

import cn.dawn.day03printer.printer.Printer;
import cn.dawn.day04aop.service.IHellowService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by Dawn on 2018/3/3.
 */
public class test20180305 {
    @Test
    /*aop入门案例*/
    public void t01(){
        ApplicationContext context=new ClassPathXmlApplicationContext("ApplicationContext-day04aop.xml");
        IHellowService service = (IHellowService) context.getBean("service");
        service.doSome();
    }
}

 

    运行结果如下:

 

目录
相关文章
|
6天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
36 8
|
2月前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
2月前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
84 5
|
2月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
85 8
|
2月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
2月前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
52 5
|
2月前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
53 4
|
2月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
50 1
|
2月前
|
Java Maven Spring
Spring 小案例体验创建对象的快感
本文介绍了如何在IDEA中创建一个Spring项目,包括项目创建、配置pom.xml文件以引入必要的依赖、编写实体类HelloSpring及其配置文件applicationContext.xml,最后通过测试类TestHelloSpring展示如何使用Spring的bean创建对象并调用方法。
40 0
|
2月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
49 0