我们来分析一下这个Demo,它的业务逻辑是求图形的面积,如果把日志服务的代码直接写在业务逻辑中,那么业务逻辑就不是纯净的,而服务也不能被其他业务逻辑共享,所以我们需要把日志服务单独写成一个类,然后通过Spring的AOP实现,动态的把服务插入到业务逻辑中。理解了这点我们再来看IOC,其实IOC的核心思想就是面向接口编程;在这里求圆的面积和求正方形的面积是不一样的,那么为了减弱对象与对象的之间的依赖关系,我们需要对业务逻辑进行抽象,即定义圆形和正方形的接口--几何图形。
//定义业务逻辑的抽象--Figure接口
package mypack;
public interface Figure {
void computeArea();
}
//定义业务逻辑的实现--圆形
package mypack;
public class Round implements Figure{
public void computeArea() {
System.out.println("计算圆形面积");
}
}
//定义业务逻辑的实现--正方形
package mypack;
public class Square implements Figure{
public void computeArea() {
System.out.println("计算正方形面积");
}
}
//对业务逻辑封装的抽象
package mypack;
public interface ComputeInterface {
public abstract void compute();
}
//对业务逻辑进行封装,并采用set注入方式来实现依赖注入
package mypack;
public class Compute implements ComputeInterface {
private Figure figure;
public Figure getFigure() {
return figure;
}
public void setFigure(Figure figure) { //set注入
this.figure = figure;
}
public void compute(){ //业务逻辑封装
figure.computeArea();
}
}
//将日志服务从业务逻辑中剥离出来产生一个Advice,这个Advice从而可以为其他业务逻辑反复使用
package mypack;
import java.lang.reflect.*;
import java.util.logging.*;
import org.springframework.aop.*;
public class LogBeforeAdvice implements MethodBeforeAdvice{
private Logger loger = Logger.getLogger(this.getClass().getName());
public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
loger.log(Level.INFO, "方法开始启动 " + arg0);
}
}
//applicationContext.xml在后面做了很多事情,如实现依赖注入和产生动态代理对象将Advice织入到业务逻辑中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="round" class="mypack.Round">
</bean>
<bean id="square" class="mypack.Square">
</bean>
<bean id="compute" class="mypack.Compute">
<property name="figure">
<ref bean="round"/>
</property>
</bean>
<bean id="logBeforeAdvice" class="mypack.LogBeforeAdvice">
</bean>
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>mypack.ComputeInterface</value>
</property>
<property name="target">
<ref bean="compute"/>
</property>
<property name="interceptorNames">
<list>
<value>logBeforeAdvice</value>
</list>
</property>
</bean>
</beans>
//最后来写一段测试代码来测试上面的代码
package mypack;
import org.springframework.context.*;
import org.springframework.context.support.*;
public class TestDemo {
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
ComputeInterface comp = (ComputeInterface)context.getBean("proxy");
comp.compute();
}
}
分享到:
相关推荐
NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...
**Spring AOP 实现详解** 在Java开发中,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者将关注点从核心业务...
spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:...
在这个"springAOP实现数据字典.zip"压缩包中,我们主要关注的是如何利用Spring AOP来实现数据字典的功能。数据字典是系统设计中一个关键的组成部分,它存储了系统中所有数据的描述,包括数据项、数据结构、数据流、...
2. **Spring AOP实现方式** - **代理模式**:Spring AOP使用两种代理方式,JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring会使用JDK动态代理;如果没有实现接口,Spring会使用CGLIB代理生成子类。 - **JDK...
2. **Spring AOP实现日志记载** - **配置Spring AOP**:首先,我们需要在Spring配置文件中启用AOP代理。通常,对于基于注解的配置,会使用`<aop:aspectj-autoproxy>`标签;对于XML配置,可以使用`<aop:config>`和`...
【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...
Spring AOP 实现原理详解之 AOP 切面的实现 Spring AOP 是基于 IOC 的 Bean 加载来实现的,本文主要介绍 Spring AOP 原理解析的切面实现过程。AOP 切面的实现是将切面类的所有切面方法根据使用的注解生成对应 ...
标题"spring aop实现日志功能"涉及到的是如何利用Spring AOP来记录和跟踪应用程序中的操作,这对于调试、性能分析和故障排查至关重要。下面我们将详细探讨如何通过Spring AOP来实现日志功能。 首先,理解AOP的基本...
在本示例中,我们将深入探讨如何利用Spring AOP实现简单的权限验证。 首先,AOP的核心概念是切面(Aspect),它封装了横切关注点,比如日志、事务管理、权限验证等。在Spring AOP中,切面通过通知(Advice)来定义...
在本文中,我们将重点探讨如何使用Spring AOP实现用户权限验证。 首先,权限验证是任何应用程序中不可或缺的一部分,尤其是涉及到用户登录和访问控制的场景。通过Spring AOP,我们可以将权限验证的逻辑与业务代码...
【Spring AOP 实现】 Spring AOP,即Spring的面向切面编程,是一种编程范式,用于处理系统中的横切关注点,如日志、事务管理等,它将这些关注点与业务逻辑分离,提高了代码的可维护性和复用性。AOP在Spring框架中的...
Spring AOP实现详解 在Java开发中,Spring框架以其强大的功能和灵活性被广泛采用,而AOP(面向切面编程)是Spring框架的一个重要组成部分。AOP允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、权限检查...
2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用
Spring AOP(面向切面编程)是Spring框架中的一个重要组件...通过理解advice、pointcut和advisor这三个核心概念,开发者可以更有效地利用Spring AOP实现日志记录、事务管理等各种功能,提高代码的可维护性和可扩展性。
在Spring AOP中,切面可以通过编写带有注解的类或者XML配置来实现。切面通常包括一个或多个通知,以及连接点的定义。 2. **通知(Advice)** 通知是在特定的连接点上执行的代码,它可以是前置通知(Before)、后置...
在这个“Spring AOP 实现”的主题中,我们将深入探讨如何通过注解在Spring中实现AOP,以及如何为AOP通知传递参数。 首先,让我们了解AOP的基本概念。AOP的核心思想是切面(Aspect),它封装了特定的横切关注点。...
动态代理则是Spring AOP实现的核心技术之一,它允许我们在运行时创建具有额外行为的对象。下面将详细阐述Spring AOP的配置以及动态代理的实现。 一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,...
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...