spring中aop的前值增强

Spring AOP的几个概念

1.切面(Aspect):切面就是一个关注点的模块化,如事务管理、日志管理、权限管理等;
2.连接点(Joinpoint):程序执行时的某个特定的点,在Spring中就是一个方法的执行;
3.通知(Advice):通知就是在切面的某个连接点上执行的操作,也就是事务管理、日志管理等;
4.切入点(Pointcut):切入点就是描述某一类选定的连接点,也就是指定某一类要织入通知的方法;
5.目标对象(Target):就是被AOP动态代理的目标对象;

spring中包括前置增强、后置增强、和环绕增强等,而前置增强,我们可以讨论一下他们的使用:

我的代码如下:

定义一个接口IHello.java

package Spring;

public interface IHello { //定义一个接口
public void hello(String name);

}

创建一个类实现接口HelloSpacker.java

package Spring;

public class HelloSpacker implements IHello{

       //继承该接口,并且实现接口的方法

@Override
public void hello(String name){
System.out.println("hello,"+name);
}
}

创建一个类实现前值增强LogBeforeAdvice.java

package Spring;

import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.springframework.aop.MethodBeforeAdvice;

public class LogBeforeAdvice implements MethodBeforeAdvice{
//继承MethodBeforeAdvice,前值增强设计为一个独立的类
private Logger logger=Logger.getLogger(this.getClass().getName());
@Override
public void before(Method method,Object[] arg, Object target) //前置增强实现的方法
throws Throwable {
logger.log(Level.INFO,"method start..."+method);
} //前置增强
}

配置文件spring.xml

                

测试类SpringDemo.java

package Spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringDemo {
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext context=new ClassPathXmlApplicationContext("Spring.xml");
IHello helloProxy=(IHello)context.getBean("helloProxy");
helloProxy.hello("Justin!!!");

}
}

后置增强的代码,实现AfterReturningAdvice接口

public class LogAfterAdvice implements AfterReturningAdvice{
Logger logger=Logger.getLogger(this.getClass().getName());

 

@Override
public void afterReturning(Object object, Method method,Object[] target,
Object args) throws Throwable {
logger.log(Level.INFO,"Methdo ends..."+method);

}
}

 测试代码结果

 After Throwing Advice:基于XML Schema

package SpringMVC;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import Spring.IHello;

public class SpringDemo{
public static void main(String[] args) {
@SuppressWarnings("resource")
ApplicationContext context=new ClassPathXmlApplicationContext("bean-config.xml");
IHello helloSpeacker=(IHello)context.getBean("helloSpeacker");
try{
helloSpeacker.hello("Justin!!!!!!!!!!!!!!!");
}catch(Exception e){
e.printStackTrace();
}
}

}

 

 

没有停止的脚步,只有倒下去的脚步
原文地址:https://www.cnblogs.com/hkMblogs/p/10799494.html