springboot-AOP的介绍

      上一节中,因为反欺诈软件接口是通过aop的形式引入的,所以接下来介绍下aop的实现。其实再springboot中的实现aop是很简单的,仅仅需要知道几个注解就可以了。

      准备工作:首先要引入springboot的基础包和aop对应的包。如下:

	<dependencies>
		<!-- 引入springboot的基础配置,这里的容器使用undertow,不适用tomcat -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- 移除自带的tomcat -->>
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
			<version>1.4.0.RELEASE</version>
		</dependency>
        <!-- 引入undertow -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-undertow</artifactId>
			<version>1.4.0.RELEASE</version>
		</dependency>

		<!--这个是aop需要引入jar包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
			<version>1.4.0.RELEASE</version>
		</dependency>
	</dependencies>

  上述的undertow和tomcat一样,这里我会使用,是因为公司在用undertow,听公司大佬说某些场景下,这个性能要好。

然后创建以下的包结构:

  AopSpringApplication是springboot的启动类:代码很简单:


 @SpringBootApplication
 public class AopSpringApplication {
   
    public static void main(String[] args) {
        SpringApplication.run(AopSpringApplication.class, args);
    }
 }

 

1、@Before

对应的controller也如下:

@Controller
@RequestMapping("/v1")
public class AopController {
    //这个是springboot自带的日志打印类,这个很好用,建议使用
    //前段时间,公司日志的管理就是用logback管理的,提供按大小
    //切割和按天回滚各种功能。
	Logger logger = LoggerFactory.getLogger(this.getClass());
    @RequestMapping("/before")
	public ResponseEntity<?> aopBefore(@RequestParam String songName){
    	logger.info(String.format("这是输入参数%s", songName));
		return new ResponseEntity(null,HttpStatus.OK);
	}
}

对应的aop的前置通知如下:

package itouchtv.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
 * @author created by chenjianhui 2018/11/22
 * 这两个不陌生吧,刚学spring的时候,总会讲,这两个是spring的
 * 核心部分,一个是Aop和一个是Ioc,Aop表示切面,Ioc是依赖注入。
 */
@Aspect//声明为一个切面
@Component//注入到spring容器中
public class AopAspect {
	private final static int FIRST_ARG = 0;//第一个参数
	private final static int SENCOND_ARG = 1;//第二个参数
	Logger logger = LoggerFactory.getLogger(this.getClass());
    @Before("execution( * itouchtv.controller.v*.AopController.aopBefore(..))")
	public void beforeTest(JoinPoint join) {
		String songName =  (String)join.getArgs()[FIRST_ARG];
		logger.info(String.format("这是前置通知拦截的地方,拦截第一个参数第一个参数%s", songName));
	}
}

然后在启动类中,右键run as  - java application 就行了可以启动运用。在浏览器中输入:

http://localhost:8080/v1/before?songName=搁浅

就可以看到控制台中输出以下结果:

2018-11-22 22:3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值