spreing 增强

1.前置增强

接口     类

public interface ISomeService {
    public void doSome();
}
public class SomeService implements ISomeService {
    //核心业务
    public void doSome(){
        System.out.println("我们都要找到Java开发工作,薪资6,7,8,9,10K");
    }
}

import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;

//前置通知
public class MyBeforeAdvise implements MethodBeforeAdvice {

    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println("=============log==================");
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
">
   <!--01.目标对象-->
    <bean id="someService" class="cn.bdqn.spring09aop01.SomeService"></bean>

    <!--02.增强 通知-->
    <bean id="beforeAdvice" class="cn.bdqn.spring09aop01.MyBeforeAdvise"></bean>

    <!--03.aop -->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置需要增强的目标对象-->
        <property name="target" ref="someService"></property>
        <!--做怎么样的增强-->
        <property name="interceptorNames" value="beforeAdvice"></property>
        <property name="proxyTargetClass" value="true"></property>
    </bean>

</beans>

单侧

@Test
    // 前置增强
    public void test04(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContextspring07aop01.xml");
        SomeService service = (SomeService) ctx.getBean("proxyService");
        service.doSome();
    }

2.后置增强

public class MyAfterReturningAdvice implements AfterReturningAdvice {
    public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
        System.out.println("===========after================");
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
">
   <!--01.目标对象-->
    <bean id="someService" class="cn.bdqn.spring10afterreturingadvice.SomeService"></bean>

    <!--02.增强 通知-->
    <bean id="afterAdvice" class="cn.bdqn.spring10afterreturingadvice.MyAfterReturningAdvice"></bean>

    <!--03.aop -->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置需要增强的目标对象-->
        <property name="target" ref="someService"></property>
        <!--做怎么样的增强-->
        <property name="interceptorNames" value="afterAdvice"></property>

    </bean>

</beans>

单侧

@Test
    // 后置增强
    public void test05(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContextspring08aop02.xml");
        ISomeService service = (ISomeService) ctx.getBean("proxyService");
        service.doSome();
    }

3.环绕增强

public class MyMethodInterceptor implements MethodInterceptor {
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        System.out.println("before");
        methodInvocation.proceed();
        System.out.println("after");
        return null;
    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
">
   <!--01.目标对象-->
    <bean id="someService" class="cn.bdqn.spring11methodinterceptor.SomeService"></bean>

    <!--02.增强 通知-->
    <bean id="methodAdvice" class="cn.bdqn.spring11methodinterceptor.MyMethodInterceptor"></bean>

    <!--03.aop -->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置需要增强的目标对象-->
        <property name="target" ref="someService"></property>
        <!--做怎么样的增强-->
        <property name="interceptorNames" value="methodAdvice"></property>

    </bean>

</beans>

单侧

 @Test
    // 环绕增强
    public void test06(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContextspring09aop03.xml");
        ISomeService service = (ISomeService) ctx.getBean("proxyService");
        service.doSome();
    }

4.异常增强

public class MyThrowsAdvice implements ThrowsAdvice {
    public void afterThrowing(Exception ex){
        System.out.println("错误");
    }

}
public interface IHHJJ {
    public void run();
    public void run(String style);
}

public class HHJJImpl implements IHHJJ {
    public void run() {

    }

    public void run(String style) {

    }
}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd
">
   <!--01.目标对象-->
    <bean id="someService" class="cn.bdqn.spring12throwadvice.SomeService"></bean>

    <!--02.增强 通知-->
    <bean id="throwsAdvice" class="cn.bdqn.spring12throwadvice.MyThrowsAdvice"></bean>

    <!--03.aop -->
    <bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置需要增强的目标对象-->
        <property name="target" ref="someService"></property>
        <!--做怎么样的增强-->
        <property name="interceptorNames" value="throwsAdvice"></property>

    </bean>

</beans>

单侧

 @Test
    // 异常增强
    public void test07(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContextspring10aop04.xml");
        ISomeService service = (ISomeService) ctx.getBean("proxyService");
        service.doSome();
    }

时间: 2024-10-26 20:20:09

spreing 增强的相关文章

[ ObjectListView ] - ListView的增强控件 - 前言 (翻译)

********************************************************************************** 原  标 题: A Much Easier to Use ListView 原文地址: https://www.codeproject.com/Articles/16009/A-Much-Easier-to-Use-ListView 翻       译: 于国栋 http://www.shannon.net.cn *********

Java Iterator和增强for循环 for each详解

Iterator是Java中的一个迭代器接口(Interface),用来提供标准的Java迭代器 Iterator支持泛型因为集合(Collection)类可以装入的类型是不确定的,从集合中取出的都是Object类型,加入泛型,就是告诉编译器确定要装入的对象类型,取值时就无需强制转换了. for each 是 Java 5 中新增的一个循环结构,本质上是一个Iterator,特点是可以用来遍历集合元素而不用考虑集合下标. 综合实例: package net.csdn.shf4715; impor

SAP第四代增强 BTE

SAP对FI模块真的做的非常透彻,所以称FI是SAP R/3 系统的中流砥柱啊,单就增强这块来看,之前有会计凭证的验证和替代,目前又出现了专为FI模块设计的增强方案BTE(OpenFI). BTE的设计思路还是比较简单,和BADI有点类似.在标准程序中留有OPEN_FI的出口(以函数OPEN_FI_PERFORM_eventid_type的形式存在),然后提供一个可配置的TABLE,可以在里面针对某个特定的Event维护自己定义的出口函数,标准程序走到这里,如果查出用户定义了出口函数,则会调用,

通过灰度线性映射增强图片对比度

Halcon中如何通过灰度线性映射增强图片对比度呢?不急,我先讲点其他的. 如果你用过Photoshop,那么想必对增强图像的对比度很熟悉.在Photoshop中,我们对下面这张图执行“色阶”调整: 执行“色阶”调整:可以观察到图片的对比度明显增强.(白的更白,黑的更黑了) 它的原理是这样的:将原图中灰度值小于55的点全部强制置为0,将灰度值高于140的点强制置为255,并且将55~140之间的色阶强行拓宽均匀映射到0~255之间,其效果是图像对比度增强了.如下图所示: 如果还不好理解,那么再看

【推荐】Win7任务栏增强工具 7+ Taskbar Tweaker 强大的任务栏标签管理工具

我曾经推荐过一款XP的任务栏管理工具 Taskix,这是一款在XP系统中拖动任务栏内标签的小工具. XP 32位可以下载我汉化的版本 http://www.cnblogs.com/clso/archive/2011/06/13/2079637.html XP 64位可以去官方下载64位版 http://taskix.robustit.com/ 但是自从我用了Windows 7系统之后,就一直没找到类似这种工具. 事实上Win7系统也提供了一个任务栏标签的分组系统,可以让相同程序的窗体界面排列在一

集合、增强for、泛型

Collection集合:Collection是层次结构中的根接口,存储的元素为对象,(也就是说只能存储引用数据类型,不能存储基础数据类型),具体可查询API.集合与数组的区别:1.集合只能存放引用数据类型,不能存放基本数据类型,存储基本类型,需要使用基本数据类型对应的包装数据类型:数组可以存放任意数据类型2.集合创建对象的时候,可以不定义指定长度,也可不指定内容:数组创建对象的时候必须指定长度或者元素.3.一个集合对象中可以存放多种数据类型,而数组中只能存放一种数据类型.4.集合的长度是可变的

JAVA8新特性——接口定义增强

JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 接口定义增强 在JDK1.8以前,接口是定义的: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 在JDK1.8之前,接口有如下特性: 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错). 接口中

oc28--Property增强

// // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject /* { @public int _age; int age; } */ /* 从Xcode4.4以后apple对@property进行了一个增强, 以后只要利用一个@property就可以同时生成setter/getter方法的声明和实现 没有告诉@property要将传入的参数赋值给谁, 默认@property会将传入的属性赋值给_开头

增强学习 | Q-Learning

"价值不是由一次成功决定的,而是在长期的进取中体现" 上文介绍了描述能力更强的多臂赌博机模型,即通过多台机器的方式对环境变量建模,选择动作策略时考虑时序累积奖赏的影响.虽然多臂赌博机模型中引入了价值的概念,但方法在建模过程中本质上是以策略为优化目标,因此又常被归为基于策略的增强学习方法. 此外,增强学习方法还有基于价值以及基于模型两类主要方法.本文介绍第二类,先从描述价值目标的Q函数开始,它也常称之为Q-Learning方法. 最简单的Q函数可用"状态-动作"二维表