`

个人aop框架

    博客分类:
  • j2se
 
阅读更多

个人aop框架

Advice.java

package com.cn.aop.advice;

import java.lang.reflect.Method;

public interface Advice {
 public void beginMethod(Object proxy,Method method,Object[] args);
 public void afterMethod(Object proxy,Method method,Object[] args);
 public void calculateTime(Object proxy, Method method, Object[] args);
}

Myadvice.java

package com.cn.aop.advice.impl;

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import com.cn.aop.advice.Advice;

public class MyAdvice implements Advice {
 private long beginTime;
 private long endTime;
 @Override
 public void afterMethod(Object proxy, Method method, Object[] args) {
  // TODO Auto-generated method stub
  beginTime = System.currentTimeMillis();
  System.out.println(method.getName()+"方法在第"+beginTime+"秒开始运行");
 }

 @Override
 public void beginMethod(Object proxy, Method method, Object[] args) {
  // TODO Auto-generated method stub
  endTime = System.currentTimeMillis();
  System.out.println(method.getName()+"方法在第"+endTime+"秒运行运行结束");
 }

 @Override
 public void calculateTime(Object proxy, Method method, Object[] args) {
  // TODO Auto-generated method stub
  System.out.println(method.getName()+"方法运行了"+(endTime-beginTime)+"秒");
 }

}

Subject.java

package com.cn.aop.subject;

public interface Subject {
 public void sayBye(String name);
}

Myadvice.java

package com.cn.aop.subject.impl;

import com.cn.aop.subject.Subject;

public class RealSubject implements Subject {

 @Override
 public void sayBye(String name) {
  // TODO Auto-generated method stub
  System.out.println(name+"Good Bye");
 }
}
BeanFactory.java

package com.cn.aop.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.cn.aop.advice.Advice;

public class BeanFactory {
 private Properties ppt = new Properties();
 public BeanFactory(InputStream input){
  try {
   ppt.load(input);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public Object getBean(String name){
  String className = ppt.getProperty(name);
  Class clazz = null;
  Object bean = null;
  try {
   clazz = Class.forName(className);
   bean=clazz.newInstance();
   if(bean instanceof BeanProxyFactory){
    Object proxy = null;
    Advice advice = (Advice)Class.forName(ppt.getProperty(name+".advice")).newInstance();
    Object target = Class.forName(ppt.getProperty(name+".target")).newInstance();
    BeanProxyFactory proxyFactory =(BeanProxyFactory)bean;
    proxyFactory.setTarget(target);
    proxyFactory.setAdvice(advice);
    proxy = proxyFactory.getProxy();
    return proxy;
   }
   
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return bean;
 }
}

BeanProxyFactory.java

package com.cn.aop.factory;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.cn.aop.advice.Advice;

public class BeanProxyFactory {
 private Advice advice;
 private Object target;
 public Advice getAdvice() {
  return advice;
 }
 public Object getTarget() {
  return target;
 }

 public void setAdvice(Advice advice) {
  // TODO Auto-generated method stub
  this.advice = advice;
 }
 public void setTarget(Object target) {
  // TODO Auto-generated method stub
  this.target = target;
 }
 public Object getProxy() {
  // TODO Auto-generated method stub
  Object proxy =null;
  System.out.println(getTarget());
  proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),
    new InvocationHandler(){
   Advice advice = getAdvice();
   @Override
   public Object invoke(Object proxy, Method method, Object[] args)
     throws Throwable {
    // TODO Auto-generated method stub
    advice.beginMethod(proxy, method, args);
    Object returnValue = method.invoke(target, args);
    advice.afterMethod(proxy, method, args);
    advice.calculateTime(proxy, method, args);
    return returnValue;
   }
  });
  return proxy;
 }

}

DynamicProxyTest.java


package com.cn.aop;

import java.io.InputStream;

import com.cn.aop.factory.BeanFactory;
import com.cn.aop.subject.Subject;

public class DynamicProxyTest {
 public static void main(String[] args){
  InputStream input = DynamicProxyTest.class.getResourceAsStream("config.properties");
  //System.out.println(input);
  BeanFactory factory = new BeanFactory(input);
//  System.out.println(factory);
  Subject suject = factory.getBean("bean");
 }
}
属性文件:config.properties

bean.advice=com.cn.aop.advice.impl.MyAdvice
bean=com.cn.aop.factory.BeanProxyFactory
bean.target=com.cn.aop.subject.impl.RealSubject
#bean=com.cn.aop.subject.impl.RealSubject

分享到:
评论

相关推荐

    个人整理的关于AOP概念

    7. **AOP代理(AOP Proxy)**:由AOP框架创建的对象,负责执行切面的逻辑,如JDK动态代理或CGLIB代理。 8. **织入(Weaving)**:将切面逻辑插入到目标对象的过程,可在编译时、类加载时或运行时完成。 #### 三、通知...

    aop日志(个人工作)

    在Java领域,Spring框架提供了强大的AOP支持,使得开发者能够方便地实现面向切面的编程。 在“基于aop的日志增删改查的记录”这个主题中,我们关注的是如何利用AOP来记录应用中的日志,尤其是针对数据库操作(增、...

    springAOP中文文档

    4. **代理 (Proxy)**:AOP 框架创建的对象,用来包装目标对象。当客户端调用目标对象时,实际上是调用了代理对象。 5. **连接点 (Joinpoint)**:程序执行过程中的某个特定点,如方法调用、字段访问等。 6. **切点 ...

    PostSharp1.5安装包(X86和X64)以及示例

    PostSharp使用静态织入方式实现AOP,其连接点非常丰富,使用简单,而且相对其它一些.NET平台上的AOP框架来说,PostSharp较为轻量级,但是功能却一点也不逊色,因此是我比较喜欢的一个AOP框架。更多关于PostSharp的...

    AOP的相关概念,基于XML的AOP的配置,基于注解的AOP配置

    选择哪种配置方式取决于项目的具体需求和个人偏好。对于简单的项目或小型团队,基于注解的配置可能更为便捷;而对于大型项目或复杂的团队协作,则可能更倾向于使用基于XML的配置来获得更高的灵活性和可维护性。

    SpringAop两种配置demo

    Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在实际开发中,我们经常使用AOP来处理如日志记录、事务管理、权限校验...

    个人对spring实现AOP的方法总结

    Springframework为Java开发者提供了一个灵活的AOP框架,可以与其他技术集成,以便更好地管理应用程序中的关注点。 Spring AOP支持四种类型的Advice:Before Advice、After Advice、Around Advice、Throw Advice。 ...

    三大框架个人总结

    【三大框架个人总结】 在Java Web开发领域,"三大框架"通常指的是Struts、Spring和Hibernate,这三者合称为SSH。它们各自负责不同的职责,共同构建了一个强大的企业级应用开发解决方案。 1. **Struts**:Struts是...

    aop例子aop例子

    本例子是一个关于如何在Spring框架中实现AOP的应用实例。 标题中的"aop例子aop例子"表明我们将探讨Spring AOP的实践应用。Spring是Java领域中最流行的框架之一,它提供了对AOP的强大支持,使得我们可以方便地创建和...

    基于ssh框架开发的个人博客系统

    综上所述,这个基于SSH框架开发的个人博客系统利用了Spring的依赖注入和AOP,Struts的MVC模式,以及Hibernate的ORM功能,构建了一个功能完善的个人博客平台,同时借助MySQL数据库存储用户和文章数据。对于学习Java ...

    ssh框架 个人博客 系统

    这个个人博客系统正是基于SSH框架构建的,它实现了用户管理、文章发布、评论互动等一系列博客应有的功能,并且包含了数据库文件,意味着数据持久化层已经设计并实现。 Struts2是MVC(Model-View-Controller)架构...

    一个基于ioc、aop、config、cache、job、Jdbc轻量级JavaWeb框架(高分课设)

    一个轻量级Java框架,包含ioc、aop、config、cache、job、Jdbc、web等。个人经导师指导并认可通过的97分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为...

    基于springboot框架实现微信点餐系统,含微信支付,公众号开发,aop以及websocket思想.zip

    基于springboot框架实现微信点餐系统,含微信支付,公众号开发,aop以及websocket思想.zip个人经导师指导并认可通过的高分毕业设计项目,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者。...

    SpringGuide-AOP文档-hibernate

    在本压缩包中,我们包含了四个与IT领域相关的文件,主要涵盖了Spring框架、面向切面编程(AOP)以及Hibernate ORM框架的相关知识。下面将分别对这些知识点进行详细阐述。 首先,Spring框架是Java企业级应用开发中的...

    基于JFinal框架的个人博客系统

    **基于JFinal框架的个人博客系统** 在当前的互联网环境中,个人博客系统作为一种自我表达、知识分享和交流的平台,已经变得越来越普遍。本项目基于Java的轻量级Web开发框架——JFinal,构建了一个高效、简洁且易于...

    javaWeb个人博客系统页面SSH2框架

    总的来说,这个JavaWeb个人博客系统利用SSH2框架构建,实现了用户管理、文章发布、评论互动等功能,是一个典型的Web应用实例。学习这个系统可以帮助开发者掌握JavaWeb开发的基本流程和技术,理解MVC架构以及Spring、...

    开源mvc框架源码

    2. **Java开源框架**:如Spring MVC,它是Spring框架的一部分,提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,使得开发者能轻松地编写出松耦合、可测试的代码。Struts2则结合了Struts1和WebWork的优点,...

    spring等框架学习电子书

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-...无论是对个人技能提升还是职业发展,深入学习Spring框架都将是一项极具价值的投资。

    ssh框架开发的个人博客系统(前后台)

    这个“ssh框架开发的个人博客系统(前后台)”项目,旨在提供一个功能完善的个人博客平台,包括前台的展示功能以及后台的用户管理模块。 1. **Struts2**:作为MVC(模型-视图-控制器)架构的一部分,Struts2负责...

    个人网络相册_ssh框架

    【SSH框架详解与个人网络相册应用】 SSH框架,全称Struts2+Spring+Hibernate,是Java开发中常用的一种企业级应用开发框架组合。它整合了三大框架的优势,为开发者提供了一种高效、灵活且稳定的开发环境。在这个...

Global site tag (gtag.js) - Google Analytics