AOP:纯注解配置Aspect

一、导入相关依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
    </dependencies>

二、编写目标对象

public interface AccountTest {
    void select();
    void update();

}

实现类

@Repository
public class AccountTestImpl implements AccountTest {
    @Override
    public void select() {
        System.out.println ("AccountTestImpl查询方法");
    }

    @Override
    public void update() {
        System.out.println ("AccountTestImpl修改方法");
    }


}

三、切面

@Aspect
public class MyAspectJ {

    @Pointcut("execution(* com.lntower.dao.*.*(..))")
    private void myPointCut(){};

    /**
     * 前置通知,使用JoinPoint接口作为参数用来获取目标对象的信息
     * @param point
     */

    @Before ("myPointCut()")
    public void before(JoinPoint point){
        System.out.println ("前置通知,权限管理");
        System.out.println ("目标类对象:"+point.getTarget ()+"被增强的方法:"+point.getSignature ().getName ());
        System.out.println ("===========================================");
    }


    /**
     *方法执行后增强
     * @param point
     */
    @AfterReturning("myPointCut()")
    public void afterReturn(JoinPoint point){
        System.out.println ("后置返回通知,关闭流,删除临时文件");
        System.out.println ("增强的方法:"+point.getSignature ().getName ());
        System.out.println ("===========================================");
    }

    /**
     * ProceedingJoinPoint 是JoinPoint的子接口,代表目标类对象可以执行的方法
     * @param pj
     * @return
     * @throws Throwable
     */
    @Around ("myPointCut()")
    public Object around(ProceedingJoinPoint pj) throws Throwable {
        System.out.println ("环绕通知开始,执行日志事务、开始事务");
        Object proceed = pj.proceed();
        System.out.println ("环绕通知结束,执行关闭事务");
        return pj;
    }

    @AfterThrowing(pointcut = "myPointCut()",throwing = "throwable")
    public void except(Throwable throwable){
        System.out.println ("异常通知:"+throwable.getMessage ());
    }

    @After ("myPointCut()")
    public void after(){
        System.out.println ("后置最终通知:释放资源");
        System.out.println ("===========================================");
    }

四、注解类

@Configuration
@EnableAspectJAutoProxy
@ComponentScan({"com.lntower.dao"})
@Import (MyAspectJ.class)
public class SprinfConfig {

}

五、测试

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SprinfConfig.class);
        UserTest bean = context.getBean (UserTest.class);
        bean.insert ();

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值