JAVA: 面向对象编程
面向对象有很多对象,每个对象有很多法,而我们每做的一个动作都是一个方法.
面向对象关注的是将需求功能垂直划分为不同的并且相对独立的,会封装好很好的类 并且有属于他们自己的行为.
AOP技术 :利用的是一种横切的技术,将面向对象构建的庞大的类的体系进行水平的切割,并且会将那些影响到多个类的公共行为封装成一个可重用的模块,这个模块称之为切面,所以AOP叫做面向切面编程
关键思想: 将能用的逻辑从业务逻辑中分离出来
附上一些简单的代码:
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
@Before("execution(public * com.imooc.controller.BuyerProductController.*(..))")//拦截BuyerProductController下所有的方法
public void beforeLogAllMethod() {
//System.out.println("Before-HttpAspect: 拦截所有方法");
logger.info("Before-HttpAspect: 拦截所有方法");
}
@After("execution(public * com.imooc.controller.BuyerProductController.*(..))")//拦截BuyerProductController下所有的方法
public void afterLog() {
//System.out.println("After-HttpAspect: 拦截所有方法");
logger.info("After-HttpAspect: 拦截所有方法");
}
//以上方法比较Low重复的比较多 优化二个
@Pointcut("execution(public * com.imooc.controller.BuyerProductController.list(..))")//寻找切入点
public void log() {
}
@Before("log()")//拦截list()方法 before 在方法执行之前
public void beforeLog1() {
//System.out.println("Before-HttpAspect: 拦截list()方法");
logger.info("Before-HttpAspect: 拦截list()方法");
}
@After("log()")//拦截list()方法 after 在方法执行之后
public void afterLogAllMethod1() {
//System.out.println("After-HttpAspect: 拦截list()方法");
logger.info("After-HttpAspect: 拦截list()方法");
}
@Before("log()")
public void beforeRequestInfo(JoinPoint joinPoint) {//获取方法里的内容
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
//url
logger.info("url :{}", request.getRequestURL());
//mehtod
logger.info("mehtod :{}", request.getMethod());
//ip
logger.info("ip :{}", request.getRemoteAddr());
//类方法
logger.info("class_method :{}", joinPoint.getSignature().getDeclaringTypeName() + "...." + joinPoint.getSignature().getName());
//参数
logger.info("args :{}", joinPoint.getArgs());
}
@AfterReturning(returning = "object", pointcut = "log()")//获取返回的内容
public void doAfterReturning(Object object) {
logger.info("response: {}", object);
}