aop 例子(annotation方式实现)
- public class UserDAOImp implements UserDAO
- {
- @Override
- public void save(User u)
- {
- System.out.println("a DAO implements!");
- }
- }
1. 解决办法一:
- public class UserDAOImp implements UserDAO
- {
- @Override
- public void save(User u)
- {
- System.out.println("before!!!!!");
- System.out.println("a DAO implements!");
- System.out.println("after!!!!!!");
- }
- }
2. 解决办法二:
- public class UserDAOImp1 extends UserDAOImp
- {
- @Override
- public void save(User u)
- {
- System.out.println("save start......");
- super.save(u);
- }
- }
评价:继承尽量少用。可拓展性也差!!
- public class UserDAOImp2 implements UserDAO
- {
- private UserDAO userDAO = new UserDAOImp();
- @Override
- public void save(User u)
- {
- System.out.println("save start.....");
- userDAO.save(u);
- }
- }
评价:比较灵活了,但还是有一个问题, 当有1000个bean时, 就要组合1000次........如何解决?
- /*
- *面向切面编程, 动态代理. Aspect声明切面, Component初始化.
- */
- @Aspect
- @Component
- public class LogInterceptor
- {
- //这个可用来替代以后重复出现的. 直接在后面的Before("myMethod()")就行了.
- @Pointcut("execution(public * com.dao.impl..*.*(..))")
- public void myMethod(){};
- //下面用到的是织入点语法, 看文档里面有. 就是指定在该方法前执行
- //@Before("execution(public void com.dao.impl.UserDAOImp.save(com.model.User))")
- //记住下面这种通用的, *表示所有
- @Before("execution(public * com.dao.impl..*.*(..))")
- public void beforeMethod()
- {
- System.out.println("save start......");
- }
- //正常执行完后
- @AfterReturning("execution(public * com.dao.impl..*.*(..))")
- public void afterReturnning()
- {
- System.out.println("after save......");
- }
- //抛出异常时才调用
- @AfterThrowing("myMethod()")
- public void afterThrowing()
- {
- System.out.println("after throwing......");
- }
- //环绕, 这个特殊点.
- @Around("myMethod()")
- public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable
- {
- //加逻辑的时候, 不要依赖执行的的先后顺序
- System.out.println("method around start!");
- pjp.proceed();
- System.out.println("method around end!");
- }
- }
aop 例子(annotation方式实现)的更多相关文章
- 5.3 Spring5源码--Spring AOP使用接口方式实现
Spring 提供了很多的实现AOP的方式:Spring 接口方式,schema配置方式和注解. 本文重点介绍Spring使用接口方式实现AOP. 使用接口方式实现AOP以了解为目的. 更好地理解动态 ...
- spring aop 使用注解方式总结
spring aop的注解方式:和xml的配置方式略有区别,详细如下: 1.首先还是建立需要的切面类:切面类里面定义好切点配置,以及所有的需要实现的通知方法. /** * */ package com ...
- springboot aop 自定义注解方式实现完善日志记录(完整源码)
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 一:功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能. 主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型 ...
- springboot aop 自定义注解方式实现一套完善的日志记录(完整源码)
https://www.cnblogs.com/wenjunwei/p/9639909.html https://blog.csdn.net/tyrant_800/article/details/78 ...
- Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制
Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...
- Spring整合Hibernate:2、使用Annotation方式进行声明式的事务管理
1.加入DataSourceTransactionManager的命名空间 修改applicationContext.xml文件,增加如下内容: 1 2 3 4 5 6 7 8 9 10 11 12 ...
- 一个简单的Spring AOP例子
转载自: http://www.blogjava.net/javadragon/archive/2006/12/03/85115.html 经过这段日子的学习和使用Spring,慢慢地体会到Sprin ...
- spring+springMVC集成(annotation方式)
spring+springMVC集成(annotation方式) SpringMVC+Spring4.0+Hibernate 简单的整合 MyBatis3整合Spring3.SpringMVC3
- 框架源码系列七:Spring源码学习之BeanDefinition源码学习(BeanDefinition、Annotation 方式配置的BeanDefinition的解析)
一.BeanDefinition 1. bean定义都定义了什么? 2.BeanDefinition的继承体系 父类: AttributeAccessor: 可以在xml的bean定义里面加上DTD ...
随机推荐
- Cocos2d-x 3.1.1 学习日志2--error:仅仅有静态常量整型数据成员才干够在类中初始化
今天遇到比較低端的一个问题,就是成员的初始化问题,编译器也无法验证,不同的编译器有些能过有些不能过,我也不知道为什么,总是我们以vs为准吧,以为我们用的环境就是它,话不多说.解决方式例如以下: ...
- warning: mysql-community-libs-5.7.11-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5
1.错误描写叙述 [root@ mysql]# rpm -ivh mysql-community-libs-5.7.11-1.el7.x86_64.rpm warning: mysql-communi ...
- linux SPI驱动——spi协议(一)
一:SPI简介以及应用 SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在 ...
- 【转载】【selenium+Python WebDriver】之selenium的定位以及切换frame(iframe)
感谢CSDN:huilan_same大神 网页地址:http://blog.csdn.net/huilan_same/article/details/52200586
- 深入Asyncio(十)异步解析式
Async Comprehensions 目前已经学会了如何在Python中进行异步迭代,接下来的问题是这是否适用于解析式?答案是OJBK!该支持在PEP 530中提及,建议去读一下. >> ...
- WCF配置心得
根据蒋金楠老师的博文所说的, WCF的终结点有三个要素组成,分别是地址(Address).绑定(Binding)和契约(Contract),简记可写成Endpoint = ABC. 地址:地址决定了服 ...
- Emgu安装配置及使用
前言:项目需要,需使用图像处理来完成机械臂从运动的皮带上抓取物体的功能,所以又重拾视觉与图像处理内容. 内容:Emgu是OpenCV的一个跨平台的.NET封装,结构如下图所示: 下载地址:http:/ ...
- python 基础 7.4 os 模块
#/usr/bin/python #coding=utf8 #@Time :2017/11/11 3:15 #@Auther :liuzhenchuan #@File :os 模块.py im ...
- 五个知识体系之-SQL学习-第三天
1. sql约束作用 主键约束作用:保证插入数据的有效性.比如性别列,只能是“男”“女”,输入“abc”就是无效的,所以你可以添加约束alter table 表名add constraint chk_ ...
- ArcGIS api for js OverviewMap(鹰眼/概览图)
说明.本篇博客中主要介绍 地图显示在某个div情况 1.运行效果 2.HTML <!DOCTYPE html> <html> <head> <meta htt ...