`
zhukang0725
  • 浏览: 15886 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Spring中的AOP学习1

阅读更多
AOP(Aspect Oriented programming)的意思是面向方面编程。利用AOP+OOP,可以实现更为有效的编程。我们知道,像日志输出,如果在每一个操作里面都有这个方法,那么将产生大量的冗余代码。在Spring中的AOP是建立在Java代理机制上的。
    下面我们举一个例子,用于添加用户的例子。

package org.jnotnull;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class AddUser{
private Logger logger = Logger.getLogger(this.getClass().getName());

public void add(User user){
logger.log(Level.INFO,user.getName+"开始添加");
..
logger.log(Level.INFO,user.getName+"数据添加成功");
}
}

下面我们编写测试类:

package org.jnotnull;
public class Test{
public static void main(String [] args){
User user = new User();
user.setName = "JNotNull";
user.setSex ="man";
AddUser adduser = new AddUser();
adduser.add(user);
}
}

这样在运行的时候就会在Console中输出日志信息了。现在问题的关键是如果在每一个方法中,都这样去跟踪日志的话,会产生大量的冗余。
  下面我们用面向接口的方法实现输出。
  我们看一下代码。首先我们创建一个添加用户的接口。

package org.jnotnull;
public interface AddUserInterface{
public void addUser(User user);
}

再看一下它的实现类

package org.jnotnull;
public AddUser implements AddUserInterface{
public void addUser(User user){
..
}
}

下面再编写一个代理类:

package org.jnotnull;
public class AddUserProxy{
private Logger logger = Logger.getlogger(this.getClass().getName());
private AddUserInterface adduserinterface;
public AddUserProxy(AddUserInterface adduserinterface){
this.adduserinterface = adduserinterface;
}
public void addUser(User user){
logger.log(Level.INFO,user.getName+"开始添加");
adduserinterface.addUser(user);
logger.log(Level.INFO,user.getName+"数据添加成功");
}
}

下面编写测试类:

package org.jnotnull;
public class Test{
public static void main(String [] args){
User user = new User();
user.setName = "JNotNull";
user.setSex ="man";
AddUserProxy adduserproxy = new AddUserProxy(new AddUser());
adduser.add(user);
}
}

这样是不是很好的把日志输出这个面给分离开来了呢。使用面向接口编程确实不错。
下面我们运用Java的代理机制进行输出。
首先看一下日志信息的代理类。

package org.jnotnull;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.apache.logrj.Level;
import org.apache.logrj.Logger;
private class LogProxy implements InvocationHandler{
private Logger logger = Logger.getLogger(this.getClass().getName());
private Object delegate;
public Object bind(Object delegate){
this.delegate=delegate;
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),delegate.getClass().getInterfaces(),this);
}
public Object invoke(Object proxy,Method method,Object []args)throws Thorwable{
Object result = null;
try{
logger.log(Level.INFO,user.getName+"开始添加");
result = method.invoke(delegate,args);
logger.log(Level.INFO,user.getName+"数据添加成功");
}catch(Exception e){
logger.log(Level.INFO,e.toString());
}
return result;
}
}

我们创建一个添加用户的接口。

package org.jnotnull;
public interface AddUserInterface{
public void addUser(User user);
}

再看一下它的实现类

package org.jnotnull;
public AddUser implements AddUserInterface{
public void addUser(User user){
..
}
}


下面编写测试类:

package org.jnotnull;
public class Test{
public static void main(String [] args){
LogProxy logproxy = new LogProxy();
User user = new User();
user.setName = "JNotNull";
user.setSex ="man";
AddUserInterface adduserinterface = (AdduserInterface)logProxy.bind(new AddUser());
adduserinterface.add(user);
}
}
分享到:
评论

相关推荐

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    Spring AOP,即面向切面编程,是Spring框架的核心组件之一,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。...通过学习和实践,你可以更好地在Spring框架中利用AOP解决实际问题。

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    Spring IOC AOP学习示例

    Spring IOC AOP学习示例代码,包含Spring常用操作示例和所有所需jar文件。参考博客:http://blog.csdn.net/daijin888888/article/details/51735291

    spring-aop.xsd

    `spring-aop.xsd`文件是Spring AOP配置的XML Schema定义文件,用于指导和验证XML配置中的元素和属性,确保其符合规范,同时也为IDE提供代码提示和自动补全功能,提高开发效率。 在Java开发中,AOP(Aspect Oriented...

    Spring.net Aop 例子

    通过这个例子,你可以学习到如何在Spring.NET环境中实现AOP,理解动态代理的工作原理,并掌握如何在实际项目中应用AOP来提高代码的灵活性和可维护性。这将有助于你编写更加模块化、易于维护的软件系统。

    简单spring aop 例子

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...

    spring_aop.rar_spring_aop

    通过这个实例工程,学习者可以直观地理解Spring AOP的工作原理,如何定义切面、配置通知以及如何在实际项目中应用。同时,它还能帮助开发者理解如何在不修改原始业务代码的情况下,实现通用功能的插入,提高代码的可...

    spring 3.0 aop 实例

    1. **切入点表达式**:在Spring AOP中,我们可以使用切入点表达式来精确地定义何时应用通知。例如,`execution(* com.example.service.*.*(..))` 表示匹配com.example.service包下的所有类的所有方法。 2. **通知...

    spring2.5AOPdemo详细资料

    学习这个Demo,你需要理解每个部分的作用,分析源代码中的注解和逻辑,了解它们是如何与Spring AOP机制配合的。此外,通过运行测试用例,观察输出结果,你可以更深入地理解AOP的实际效果和应用场景。 总的来说,...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过...这个例子提供了学习Spring AOP实际操作的宝贵资源,通过阅读源码和运行测试,你将对Spring AOP有更全面的认识。

    Spring AOP学习资料(pdf)

    ### Spring AOP 学习资料知识点总结 #### 一、Spring AOP 概念与背景 **Spring AOP**(面向切面编程)是Spring框架中的一个重要组成部分,它通过预定义的切入点来分离关注点,使得核心业务逻辑更加清晰,同时能够...

    spring AOP入门教程

    - **SpringAOP.avi**:可能是一个视频教程,详细讲解了Spring AOP的概念和实践。 - **SpringAOP.doc**:可能是文档教程,包含了详细的步骤和示例代码。 - **SpringAOP_src.rar**:源代码示例,供你参考和实践。 - **...

    Spring3.1AOP简单例子

    在本示例中,我们将深入探讨Spring框架的3.1版本中的核心概念之一:面向切面编程(Aspect-Oriented Programming,简称AOP)。AOP是Spring框架的强大特性,它允许我们在应用程序中实现关注点的分离,使得我们可以将横...

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    2024-spring-aop学习项目

    《深入理解Spring AOP:2024春季学习项目指南》 ...通过这个2024春季AOP学习项目,开发者将有机会亲手实践上述概念,深入理解Spring AOP的精髓,从而在实际项目中更好地运用这一强大的工具,提升代码质量与工程效率。

    spring AspectJ aop学习

    当我们谈论"spring AspectJ aop学习"时,我们将深入探讨Spring AOP如何结合AspectJ来实现更灵活的模块化和解耦。 首先,让我们理解AOP的概念。面向切面编程(Aspect Oriented Programming)是一种编程范式,旨在将...

    Spring实现AOP的4种方式

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、...

    spring-aop-4.2.6.RELEASE.zip

    1. **增强的注解支持**:Spring AOP 4.2.6.RELEASE对基于注解的切面进行了强化,允许开发者使用@Aspect注解定义切面,使用@Before、@After、@Around等注解定义通知(advisors),极大地简化了代码编写。 2. **更...

    Spring AOP面向方面编程原理:AOP概念

    这种轻量级的特性使得Spring AOP更易于学习和集成。 3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的...

    spring-aop-4.2.xsd.zip

    标题中的"spring-aop-4.2.xsd.zip"表明这是一个与Spring框架的AOP(面向切面编程)相关的资源,版本为4.2,并且是XML Schema Definition(XSD)文件的压缩包。XSD文件用于定义XML文档的结构和数据类型,它在Spring...

Global site tag (gtag.js) - Google Analytics