• 吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Spring_XML-config


    <?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: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/aop
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
        <aop:config>
            <!-- 将fourAdviceBean转换成切面Bean
                切面Bean的新名称为:fourAdviceAspect
                指定该切面的优先级为2 -->
            <aop:aspect id="fourAdviceAspect" ref="fourAdviceBean"
                order="2">
                <!-- 定义一个After增强处理,
                    直接指定切入点表达式
                    以切面Bean中的release()方法作为增强处理方法 -->
                <aop:after pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" 
                    method="release"/>
                <!-- 定义一个Before增强处理,
                    直接指定切入点表达式
                    以切面Bean中的authority()方法作为增强处理方法 -->
                <aop:before pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" 
                    method="authority"/>
                <!-- 定义一个AfterReturning增强处理,
                    直接指定切入点表达式
                    以切面Bean中的log()方法作为增强处理方法 -->
                <aop:after-returning pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" 
                    method="log" returning="rvt"/>
                <!-- 定义一个Around增强处理,
                    直接指定切入点表达式
                    以切面Bean中的processTx()方法作为增强处理方法 -->
                <aop:around pointcut="execution(* org.crazyit.app.service.impl.*.*(..))" 
                    method="processTx"/>
            </aop:aspect>
    
            <!-- 将secondAdviceBean转换成切面Bean
                切面Bean的新名称为:secondAdviceAspect
                指定该切面的优先级为1,该切面里的增强处理将被优先织入 -->
            <aop:aspect id="secondAdviceAspect" ref="secondAdviceBean"
                order="1">
                <!-- 定义一个Before增强处理,
                    直接指定切入点表达式
                    以切面Bean中的authority()方法作为增强处理方法 
                    且该参数必须为String类型(由authority方法声明中msg参数的类型决定) -->
                <aop:before pointcut=
                "execution(* org.crazyit.app.service.impl.*.*(..)) and args(aa)" 
                    method="authority"/>
            </aop:aspect>
        </aop:config>
        <!-- 定义一个普通Bean实例,该Bean实例将被作为Aspect Bean -->
        <bean id="fourAdviceBean"
            class="org.crazyit.app.aspect.FourAdviceTest"/>
        <!-- 再定义一个普通Bean实例,该Bean实例将被作为Aspect Bean -->
        <bean id="secondAdviceBean"
            class="org.crazyit.app.aspect.SecondAdviceTest"/>
        <bean id="hello" class="org.crazyit.app.service.impl.HelloImpl"/>
        <bean id="world" class="org.crazyit.app.service.impl.WorldImpl"/>
    </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();
            System.out.println("addUser()的返回值为:"
                + hello.addUser("孙悟空" , "7788"));
            World world = ctx.getBean("world" , World.class);
            world.bar();
        }
    }
    package org.crazyit.app.aspect;
    
    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
     */
    public class FourAdviceTest
    {
        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;
        }
        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());
        }
        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());
        }
        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.aspect;
    
    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
     */
    public class SecondAdviceTest
    {
        // 定义Before增强处理
        public void authority(String aa)
        {
            System.out.println("目标方法的参数为:" + aa);
            System.out.println("①号Before增强:模拟执行权限检查");
        }
    }
    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
     */
    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
     */
    public class WorldImpl implements World
    {
        // 定义一个简单方法,模拟应用中的业务逻辑方法
        public void bar()
        {
            System.out.println("执行World组件的bar()方法");
        }
    }
  • 相关阅读:
    TopK问题:什么是TopK问题?用堆和快排这两种方式来实现TopK
    volatile是什么?volatile能保证线程安全性吗?如何正确使用volatile?
    并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)
    位运算和取模运算的运算效率对比
    jdk1.8源码解析:HashMap底层数据结构之链表转红黑树的具体时机
    jdk1.8 HashMap底层数据结构:散列表+链表+红黑树(图解+源码)
    根据jdk1.8源码整理而得,java集合体系(继承、实现关系)图解,超清晰,一看就懂,方便记忆
    java代码实现简易版IOC容器,含IOC容器实现步骤分解
    自己实现SpringAOP,含AOP实现的步骤分解
    自己实现简易版AOP,含AOP实现的步骤分解
  • 原文地址:https://www.cnblogs.com/tszr/p/12372544.html
Copyright © 2020-2023  润新知