当前位置:科普知识站>IT科技>

java|advice

IT科技 阅读(1.52W)

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java advice是什么,让我们一起了解一下?

Advice是在Join Point上执行的一个动作或者通知,一般通过拦截器调用。Spring有两大核心,IOC和AOP,在模块AOP里面有个advice。

在Spring-AOP中,增强(Advice)是如何实现的?

按照增强在目标类方法连接点的位置可以将增强划分为以下五类:

前置增强 (org.springframework.aop.BeforeAdvice) 表示在目标方法执行前来实施增强。

后置增强 (org.springframework.aop.AfterReturningAdvice)表示在目标方法执行后来实施增强。

环绕增强 (org.aopalliance.intercept.MethodInterceptor)表示在目标方法执行前后同时实施增强。

异常抛出增强 (org.springframework.aop.ThrowsAdvice) 表示在目标方法抛出异常后来实施增强。

引介增强 (org.springframework.aop.introductioninterceptor)表示在目标类中添加一些新的方法和属性。

java advice

实战操作:Spring中Advice简单案例

1、配置类

@Configuration//配之类@EnableAspectJAutoProxy//启用AspectJ自动代理@ComponentScan(basePackages = {"spring01","spring02"}) //basePackages指定扫描的包public class Config {}

2、切面类

@Aspect@Componentpublic class Audience {    /**     * 相当于访问相同报下的不同的类,他们拥有相同的包路径,可以定义一个变量     */    @Pointcut("execution(* spring02.aspect.Performance.perform(..))")    public void performance(){    }     @Before("performance()")    public void silenceCellPhones(){        System.out.println("====表演前将手机调静音");    }     @Before("performance()")    public void takeSeats(){        System.out.println("====表演前就做");    }     @AfterReturning("performance()")    public void applause(){        System.out.println("====表演后鼓掌");    }     @AfterThrowing("performance()")    public void demandRefund(){        System.out.println("====表演失败时退款");    }    @Around("performance()")    public void  watchPerformance(ProceedingJoinPoint point){        try {            System.out.println("====观看前1");            point.proceed();            System.out.println("====观看后2");        } catch (Throwable throwable) {            throwable.printStackTrace();        }    }}

3、被通知对象接口

public interface Performance {void perform();}

4、被通知对象实现类

@Component("performance")public class PerformanceImpl implements Performance{    @Override    public void perform() {        System.out.println("======表演开始=====");    }}

5、测试类

@RunWith(SpringJUnit4ClassRunner.class)//启动测试时创建Spring上下文@ContextConfiguration(classes = {Config.class})//配置文件对象public class TestClass {    @Autowired    private Performance performance;    @Test    public void test(){        performance.perform();    }}