zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Spring_JoinPoint

    <?xml version="1.0" encoding="GBK"?>
    <project name="spring" basedir="." default="">
        <property name="src" value="src"/>
        <property name="dest" value="classes"/>
    
        <path id="classpath">
            <fileset dir="../../lib">
                <include name="**/*.jar"/>
            </fileset>
            <pathelement path="${dest}"/>
        </path>
    
        <target name="compile" description="Compile all source code">
            <delete dir="${dest}"/>
            <mkdir dir="${dest}"/>
            <copy todir="${dest}">
                <fileset dir="${src}">
                    <exclude name="**/*.java"/>
                </fileset>        
            </copy>
            <javac destdir="${dest}" debug="true" includeantruntime="yes"
                deprecation="false" optimize="false" failonerror="true">
                <src path="${src}"/>
                <classpath refid="classpath"/>
                <compilerarg value="-Xlint:deprecation"/>
            </javac>
        </target>
    
        <target name="run" description="Run the main class" depends="compile">
            <java classname="lee.BeanTest" fork="yes" failonerror="true">
                <classpath refid="classpath"/>
            </java>
        </target>
    
    </project>
    <?xml version="1.0" encoding="GBK"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
        <!-- 指定自动搜索Bean组件、自动搜索切面类 -->
        <context:component-scan base-package="org.crazyit.app.service
            ,org.crazyit.app.aspect">
            <context:include-filter type="annotation"
                expression="org.aspectj.lang.annotation.Aspect"/>
        </context:component-scan>
        <!-- 启动@AspectJ支持 -->
        <aop:aspectj-autoproxy/>
    </beans>
    package lee;
    
    import org.springframework.context.*;
    import org.springframework.context.support.*;
    
    import org.crazyit.app.service.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    public class BeanTest
    {
        public static void main(String[] args)
        {
            // 创建Spring容器
            ApplicationContext ctx = new
                ClassPathXmlApplicationContext("beans.xml");
            Hello hello = ctx.getBean("hello" , Hello.class);
            hello.foo();
            hello.addUser("孙悟空" , "7788");
            World world = ctx.getBean("world" , World.class);
            world.bar();
        }
    }
    package org.crazyit.app.aspect;
    
    import org.aspectj.lang.annotation.*;
    import org.aspectj.lang.*;
    
    import java.util.Arrays;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee kongyeeku@163.com
     * @version  1.0
     */
    // 定义一个切面
    @Aspect
    public class FourAdviceTest
    {
        // 定义Around增强处理
        @Around("execution(* org.crazyit.app.service.impl.*.*(..))")
        public Object processTx(ProceedingJoinPoint jp)
            throws java.lang.Throwable
        {
            System.out.println("Around增强:执行目标方法之前,模拟开始事务...");
            // 访问执行目标方法的参数
            Object[] args = jp.getArgs();
            // 当执行目标方法的参数存在,
            // 且第一个参数是字符串参数
            if (args != null && args.length > 0
                && args[0].getClass() == String.class)
            {
                // 修改目标方法调用参数的第一个参数
                args[0] = "【增加的前缀】" + args[0];
            }
            //执行目标方法,并保存目标方法执行后的返回值
            Object rvt = jp.proceed(args);
            System.out.println("Around增强:执行目标方法之后,模拟结束事务...");
            // 如果rvt的类型是Integer,将rvt改为它的平方
            if(rvt != null && rvt instanceof Integer)
                rvt = (Integer)rvt * (Integer)rvt;
            return rvt;
        }
        // 定义Before增强处理
        @Before("execution(* org.crazyit.app.service.impl.*.*(..))")
        public void authority(JoinPoint jp)
        {
            System.out.println("Before增强:模拟执行权限检查");
            // 返回被织入增强处理的目标方法
            System.out.println("Before增强:被织入增强处理的目标方法为:"
                + jp.getSignature().getName());
            // 访问执行目标方法的参数
            System.out.println("Before增强:目标方法的参数为:"
                + Arrays.toString(jp.getArgs()));
            // 访问被增强处理的目标对象
            System.out.println("Before增强:被织入增强处理的目标对象为:"
                + jp.getTarget());
        }
        //定义AfterReturning增强处理
        @AfterReturning(pointcut="execution(* org.crazyit.app.service.impl.*.*(..))"
            , returning="rvt")
        public void log(JoinPoint jp , Object rvt)
        {
            System.out.println("AfterReturning增强:获取目标方法返回值:"
                + rvt);
            System.out.println("AfterReturning增强:模拟记录日志功能...");
            // 返回被织入增强处理的目标方法
            System.out.println("AfterReturning增强:被织入增强处理的目标方法为:"
                + jp.getSignature().getName());
            // 访问执行目标方法的参数
            System.out.println("AfterReturning增强:目标方法的参数为:"
                + Arrays.toString(jp.getArgs()));
            // 访问被增强处理的目标对象
            System.out.println("AfterReturning增强:被织入增强处理的目标对象为:"
                + jp.getTarget());
        }
    
        // 定义After增强处理
        @After("execution(* org.crazyit.app.service.impl.*.*(..))")
        public void release(JoinPoint jp)
        {
            System.out.println("After增强:模拟方法结束后的释放资源...");
            // 返回被织入增强处理的目标方法
            System.out.println("After增强:被织入增强处理的目标方法为:"
                + jp.getSignature().getName());
            // 访问执行目标方法的参数
            System.out.println("After增强:目标方法的参数为:"
                + Arrays.toString(jp.getArgs()));
            // 访问被增强处理的目标对象
            System.out.println("After增强:被织入增强处理的目标对象为:"
                + jp.getTarget());
        }
    }
    package org.crazyit.app.service;
    
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author Yeeku.H.Lee kongyeeku@163.com
     * @version 1.0
     */
    public interface Hello
    {
        // 定义一个简单方法,模拟应用中的业务逻辑方法
        void foo();
        // 定义一个addUser()方法,模拟应用中的添加用户的方法
        int addUser(String name , String pass);
    }
    package org.crazyit.app.service;
    
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author Yeeku.H.Lee kongyeeku@163.com
     * @version 1.0
     */
    public interface World
    {
        // 定义一个简单方法,模拟应用中的业务逻辑方法
        public void bar();
    }
    package org.crazyit.app.service.impl;
    
    import org.springframework.stereotype.Component;
    
    import org.crazyit.app.service.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author Yeeku.H.Lee kongyeeku@163.com
     * @version 1.0
     */
    @Component("hello")
    public class HelloImpl implements Hello
    {
        // 定义一个简单方法,模拟应用中的业务逻辑方法
        public void foo()
        {
            System.out.println("执行Hello组件的foo()方法");
        }
        // 定义一个addUser()方法,模拟应用中的添加用户的方法
        public int addUser(String name , String pass)
        {
            System.out.println("执行Hello组件的addUser添加用户:" + name);
            return 20;
        }
    }
    package org.crazyit.app.service.impl;
    
    import org.springframework.stereotype.Component;
    import org.crazyit.app.service.*;
    /**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
     * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author Yeeku.H.Lee kongyeeku@163.com
     * @version 1.0
     */
    @Component("world")
    public class WorldImpl implements World
    {
        // 定义一个简单方法,模拟应用中的业务逻辑方法
        public void bar()
        {
            System.out.println("执行World组件的bar()方法");
        }
    }
  • 相关阅读:
    管理索引表:深入研究B树索引重建,合并,删除(理论篇3)
    关于ASP.NET中Membership进行权限管理不足的解决办法
    将VS2005中的.CS文件在网页中显示的方法
    在页面中直接设计TreeView的节点而不使用Web.Sitemap文件在运行时出错
    (转)动态管理ASP.NET DataGrid数据列
    在页面中直接设计TreeView的节点而不使用Web.Sitemap文件在运行时出错
    将VS2005中的.CS文件在网页中显示的方法
    三天没有更新我的BLOG
    三天没有更新我的BLOG
    (转)动态管理ASP.NET DataGrid数据列
  • 原文地址:https://www.cnblogs.com/tszr/p/12372465.html
Copyright © 2011-2022 走看看