zoukankan      html  css  js  c++  java
  • Spring学习之旅(五)极速创建Spring AOP java工程项目

    编译工具:eclipse。

    简单说一下,Spring  AOP是干嘛的?

    假设你创建了一群类:类A,类B,类C,类D。。。。

    现在你想为每个类都增加一个新功能,那么该怎么办呢?是不是想到了为每个类增加相同的新代码。这未免也Boring了吧。不过不用担心,Spring AOP就是来帮组你脱离这种单调乏味无聊愚蠢的工作的。

    例子:创建类A,执行类A的方法。添加类A方法执行前后的时间显示。

    1)新建Java工程项目

    假设工程名为:spring_aop_hello

    2)导入AOP所需jar包

    注意,其中aspectjrt.jar和aspectjweaver.jar并不包含在Spring框架相关包里面。

    需另外下载(附下载地址:http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.8.13.jar

    另,下载后需解压,相关详细操作请看博客(http://blog.csdn.net/u012453843/article/details/52347208

    3)在src目录下创建Spring配置文件,并在配置文件中引入AOP命名空间(相关版本的命名空间可在官网查询)

    本例相关代码稍后在本篇贴出。

    4)编写业务逻辑所涉及的有关类完成原始业务需求。

    创建类A:

    package com.edu.aop.hello;
    
    public class A {
    
        private String a1;
        private String a2;
        public void methodA1(){
            System.out.println("A类的方法1被执行");
        }
        public void methodA2(){
            System.out.println("A类的方法2被执行");
        }
        public A(){}
        public A(String a1,String a2){
            this.a1=a1;
            this.a2=a2;
        }
        
    //省略相关setter/getter方法
        
    }

    配置文件aop_hello.xml(包含前文命名空间):

    <?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">
    
    <!-- 配置bean -->
    <bean id="a" class="com.edu.aop.hello.A"></bean>
    
    </beans>

    测试主方法:

    package com.edu.aop.hello;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Main {
    
        public static void main(String[] args) {
            //创建IoC容器
            @SuppressWarnings("resource")
            ApplicationContext ctx=new ClassPathXmlApplicationContext("aop_hello.xml");
            //从容器中取出对象
            A a=(A)ctx.getBean("a");
            //引用对象,按业务逻辑要求依次执行有关的方法
            a.methodA1();
            a.methodA2();
    
        }
    
    }

    运行结果:

    以上为原始业务逻辑,下面涉及AOP。

    5)采用“AOP编程”完成新添业务需求

    创建切片类X:

    package com.edu.aop.hello;
    
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    
    import org.aspectj.lang.JoinPoint;
    
    
    public class X {
    
        //连接点对象做参考,利用该参数,获取目标对象的方法
        public void methodX1(JoinPoint joinPoint){
            String methodName=joinPoint.getSignature().getName();//获取方法名
            System.out.println("我是前置通知,在A类方法:"+methodName+"()运行前被切入");
            //获取当前系统时间,并转换为yyyy年MM月dd日     HH:mm:ss格式,并显示
            Calendar startTimeNow=Calendar.getInstance();
            SimpleDateFormat fmt=new SimpleDateFormat("yyyy年MM月dd日    HH:mm:ss");
            String startTime=fmt.format(startTimeNow.getTime());
            System.out.println("A类方法:"+methodName+"(),运行时间:"+startTime);
        }
        
        
        //连接点对象做参数,利用该参数,获取目标对象的方法
        public void methodX2(JoinPoint joinPoint){
            String methodName=joinPoint.getSignature().getName();//获取方法名
            System.out.println("我是后置通知,在A类方法:"+methodName+"()运行后切入");
            //获取当前系统时间,并转换为yyyy年MM月dd日     HH:mm:ss格式,并显示
            Calendar endTimeNow=Calendar.getInstance();
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日    HH:mm:ss");
            String endTime=sdf.format(endTimeNow.getTime());
            System.out.println("A类方法:"+methodName+"()运行结束时间:"+endTime);
            
        }
    }

    在配置文件内配置切片,配置完成后的文件代码为:

    <?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">
    <!-- 配置bean -->
    <bean id="a" class="com.edu.aop.hello.A"></bean>
    
    <!-- 将切面类声明配置成一个bean -->
    <bean id="x" class="com.edu.aop.hello.X"></bean>
    
    <aop:config>
    <aop:aspect ref="x">
    <!-- 配置前置通知及前置通知的切入点 -->
    <aop:before method="methodX1" pointcut="execution(* com.edu.aop.hello.A.*())"></aop:before>
    <!-- 配置后置通知及后置通知的切入点 -->
    <aop:after method="methodX2" pointcut="execution(* com.edu.aop.hello.A.*())"></aop:after>
    </aop:aspect>
    </aop:config>
    </beans>

    6)部署运行。

    运行结果为:

    参考书籍《Java EE框架开发技术与案例教程》

  • 相关阅读:
    利用服务器部署Web项目
    JavaWeb解决文件上传后项目需要刷新问题 以及 图片过大 文件上传时间延长
    JavaWeb接入支付宝支付
    JavaWeb实现文件上传功能
    Eclipse Server中没有TomCat
    Eclipse 中没有Dynamic web Project 解决办法
    JavaWeb图形验证码
    elasticsearch常用语句
    关于elasticsearch的安装教程和使用方法
    解决el-table渲染卡顿组件
  • 原文地址:https://www.cnblogs.com/dudududu/p/8482487.html
Copyright © 2011-2022 走看看