`
shijian0306
  • 浏览: 67228 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

Spring的AOP实现

阅读更多
我们来分析一下这个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();
 }
 
}
 
分享到:
评论

相关推荐

    spring aop实现原理

    NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927

    Spring AOP实现机制

    **Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...

    Spring AOP实现 项目源码 Myeclipse 直接导入可用

    **Spring AOP 实现详解** 在Java开发中,Spring框架以其强大的功能和灵活性深受开发者喜爱。其中,AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者将关注点从核心业务...

    spring aop实现接口参数变更前后对比和日志记录

    spring aop实现接口参数变更前后对比和日志记录完整代码,拿到项目代码,只需要做数据库连接的修改即可运行起来使用,代码案例详细,真是可靠,代码原文地址:...

    springAOP实现数据字典.zip

    在这个"springAOP实现数据字典.zip"压缩包中,我们主要关注的是如何利用Spring AOP来实现数据字典的功能。数据字典是系统设计中一个关键的组成部分,它存储了系统中所有数据的描述,包括数据项、数据结构、数据流、...

    理解Spring AOP实现与思想 案例代码

    2. **Spring AOP实现方式** - **代理模式**:Spring AOP使用两种代理方式,JDK动态代理和CGLIB代理。如果目标类实现了接口,Spring会使用JDK动态代理;如果没有实现接口,Spring会使用CGLIB代理生成子类。 - **JDK...

    JAVA 中Spring aop 实现日志记载

    2. **Spring AOP实现日志记载** - **配置Spring AOP**:首先,我们需要在Spring配置文件中启用AOP代理。通常,对于基于注解的配置,会使用`&lt;aop:aspectj-autoproxy&gt;`标签;对于XML配置,可以使用`&lt;aop:config&gt;`和`...

    Spring  AOP实现方法大全

    【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...

    Spring框架系列(9) - Spring AOP实现原理详解之AOP切面的实现.doc

    Spring AOP 实现原理详解之 AOP 切面的实现 Spring AOP 是基于 IOC 的 Bean 加载来实现的,本文主要介绍 Spring AOP 原理解析的切面实现过程。AOP 切面的实现是将切面类的所有切面方法根据使用的注解生成对应 ...

    spring aop实现日志功能

    标题"spring aop实现日志功能"涉及到的是如何利用Spring AOP来记录和跟踪应用程序中的操作,这对于调试、性能分析和故障排查至关重要。下面我们将详细探讨如何通过Spring AOP来实现日志功能。 首先,理解AOP的基本...

    spring aop 实现权限的简单示例

    在本示例中,我们将深入探讨如何利用Spring AOP实现简单的权限验证。 首先,AOP的核心概念是切面(Aspect),它封装了横切关注点,比如日志、事务管理、权限验证等。在Spring AOP中,切面通过通知(Advice)来定义...

    Java之Spring AOP 实现用户权限验证

    在本文中,我们将重点探讨如何使用Spring AOP实现用户权限验证。 首先,权限验证是任何应用程序中不可或缺的一部分,尤其是涉及到用户登录和访问控制的场景。通过Spring AOP,我们可以将权限验证的逻辑与业务代码...

    SpringAOP实现.docx

    【Spring AOP 实现】 Spring AOP,即Spring的面向切面编程,是一种编程范式,用于处理系统中的横切关注点,如日志、事务管理等,它将这些关注点与业务逻辑分离,提高了代码的可维护性和复用性。AOP在Spring框架中的...

    spring aop实现

    Spring AOP实现详解 在Java开发中,Spring框架以其强大的功能和灵活性被广泛采用,而AOP(面向切面编程)是Spring框架的一个重要组成部分。AOP允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、权限检查...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑实现 (需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用

    Spring AOP实现

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件...通过理解advice、pointcut和advisor这三个核心概念,开发者可以更有效地利用Spring AOP实现日志记录、事务管理等各种功能,提高代码的可维护性和可扩展性。

    springAOP实现

    在Spring AOP中,切面可以通过编写带有注解的类或者XML配置来实现。切面通常包括一个或多个通知,以及连接点的定义。 2. **通知(Advice)** 通知是在特定的连接点上执行的代码,它可以是前置通知(Before)、后置...

    Spring AOP 实现

    在这个“Spring AOP 实现”的主题中,我们将深入探讨如何通过注解在Spring中实现AOP,以及如何为AOP通知传递参数。 首先,让我们了解AOP的基本概念。AOP的核心思想是切面(Aspect),它封装了特定的横切关注点。...

    springAOP配置动态代理实现

    动态代理则是Spring AOP实现的核心技术之一,它允许我们在运行时创建具有额外行为的对象。下面将详细阐述Spring AOP的配置以及动态代理的实现。 一、Spring AOP基础知识 1. **什么是AOP**:AOP是一种编程范式,...

    spring aop切面拦截指定类和方法实现流程日志跟踪

    本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...

Global site tag (gtag.js) - Google Analytics