博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-AOP(面向切面编程)-注解方式配置
阅读量:5142 次
发布时间:2019-06-13

本文共 3408 字,大约阅读时间需要 11 分钟。

项目结构:

 

 


 

 

切面类:

package edu.nf.ch12.service.aspect;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;/** * @author wangl * @date 2018/10/24 */@Aspect //这个注解标识当前的类为一个切面@Component //标识容器受管的Bean对象public class UserServiceAspect {    /**     * 声明一个切入点,并编写切入点表达式     */    @Pointcut("execution(* edu.nf.ch12.service.*.*(..))")    public void pointcut(){    }    /**     * 前置通知,指定切入点函数     * 也可在注解中自定义不同的切入点表达式     * @Before("execution(...)")     *     */    @Before("pointcut()")    public void before(JoinPoint joinPoint){        System.out.println("前置通知..."+joinPoint.getArgs()[0]);    }    /**     * 后置通知     */    @AfterReturning(value = "pointcut()", returning = "returnVal")    public void afterReturn(String returnVal){        System.out.println("后置通知..." + returnVal);    }    /**     * 环绕通知     */    @Around("pointcut()")    public Object around(ProceedingJoinPoint pjp) throws Throwable {        System.out.println("环绕通知前...");        Object returnVal = pjp.proceed();        System.out.println("环绕通知后...");        return returnVal;    }    /**     * 异常通知     * 通过pointcut指定切入点     */    @AfterThrowing(pointcut = "pointcut()", throwing = "e")    public void throwableAdvice(Throwable e){        System.out.println("异常通知..." + e.getMessage());    }    /**     * 最终通知     */    @After("pointcut()")    public void after(){        System.out.println("最终通知...");    }}

配置类AppConfig:

package edu.nf.ch12.service.config;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.EnableAspectJAutoProxy;/** * @author wangl * @date 2018/10/24 */@ComponentScan("edu.nf.ch12") //启用包扫描@EnableAspectJAutoProxy //启用AspectJ注解自动配置,proxyTargetClass用于指定是否强制使用cglib代理public class AppConfig {}

接口类:

package edu.nf.ch12.service;/** * @author wangl * @date 2018/10/24 */public interface UserService {    /**     * 查询用户     * @param uid     * @return     */    String getUserNameById(String uid);}

接口实现类:

package edu.nf.ch12.service.impl;import edu.nf.ch12.service.UserService;import org.springframework.stereotype.Service;/** * @author wangl * @date 2018/10/24 */@Service("userService")public class UserServiceImpl implements UserService {    @Override    public String getUserNameById(String uid) {        System.out.println("查询用户..."+uid);        return "user1";    }}

程序测试类:

package edu.nf.ch12.test;import edu.nf.ch12.service.UserService;import edu.nf.ch12.service.config.AppConfig;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @author wangl * @date 2018/10/24 */public class UserServiceTest {    @Test    public void testGetUser(){        //ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);        UserService service = context.getBean("userService", UserService.class);        service.getUserNameById("1001");    }}

如果半注解半配置文件实现的话, new ClassPathXmlApplicationContext("applicationContext.xml");实例 然后再配置一个xml

applicationContext:

 

运行结果:

 

转载于:https://www.cnblogs.com/hhmm99/p/9844137.html

你可能感兴趣的文章
void及void指针含义的深刻解析
查看>>
【UVA】434-Matty's Blocks
查看>>
五、宽度优先搜索(BFS)
查看>>
运行一个窗体直接最大化并把窗体右上角的最大化最小化置灰
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
WebForm——IIS服务器、开发方式和简单基础
查看>>
小实验3:实现haproxy的增、删、查
查看>>
Java集合类学习笔记(各种线性表性能分析)
查看>>
eclipse git 拉取内容
查看>>
FCKEditor网页编辑器
查看>>
扩展ACL,基于上下文的ACL,基于区域策略的防火墙
查看>>
Angular中ngModel的$render的详解
查看>>
读《格局》| 未到年纪的真理
查看>>
[转]《城南旧事》里的《送别》
查看>>
07动手动脑
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
python内嵌函数
查看>>
java.util.Map按照key值合并的value的Collection 集合中。
查看>>