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