1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包
* 先引入Spring框架开发的基本开发包
* 再引入Spring框架的AOP的开发包
* spring的传统AOP的开发的包
* spring-aop-4.2.4.RELEASE.jar
* com.springsource.org.aopalliance-1.0.0.jar
* aspectJ的开发包
* com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
* spring-aspects-4.2.4.RELEASE.jar
2. 步骤二:创建Spring的配置文件,引入具体的AOP的schema约束
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>
3. 步骤三:创建包结构,编写具体的接口和实现类
* com.huida.demo1
* CustomerDao -- 接口
package com.huid.demo1; public interface CustomerDao { public void save();
public void update();
}
* CustomerDaoImpl -- 实现类
package com.huid.demo1; public class CustomerDaoImpl implements CustomerDao { @Override
public void save() {
System.out.println("保存客户"); } @Override
public void update() {
System.out.println("修改客户"); } }
4. 步骤四:将目标类配置到Spring中
<bean id="customerDao" class="com.huida.demo1.CustomerDaoImpl"/>
5. 步骤五:定义切面类
* 添加切面和通知的注解
* @Aspect -- 定义切面类的注解
* 通知类型(注解的参数是切入点的表达式)
* @Before -- 前置通知
* @AfterReturing -- 后置通知
* @Around -- 环绕通知
* @After -- 最终通知
* @AfterThrowing -- 异常抛出通知
* 具体的代码如下
@Aspect
public class MyAspectAnno {
@Before(value="execution(public void com.huida.demo1.CustomerDaoImpl.save())")
public void log(){
System.out.println("记录日志...");
}
}
当切入类中有很多通知时,如果一直使用原来的@Before(value="....")这种方式,则需要重复写很多次value="....."。很冗余,所以我们定义一个自定义切入点的方法:
@PointCut(value="execution(public void com.huida.demo1.CustomerDaoImpl.save())")
public void fn(){}//这个函数名可以任意定义
当我们再次写通知的时候,不必写为@Before(value="execution(public void com.huida.demo1.CustomerDaoImpl.save())"),而可以写为@Before(value="MyAspectAnno.fn()")
6. 步骤六:在配置文件中定义切面类
<bean id="myAspectAnno" class="com.huida.demo1.MyAspectAnno"/>
7. 步骤七:在配置文件中开启自动代理
<aop:aspectj-autoproxy/>
8. 完成测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo1 {
@Resource(name="customerDao")
private CustomerDao customerDao;
@Test
public void run1(){
customerDao.save();
customerDao.update();
}
}
Spring框架的AOP技术(注解方式)的更多相关文章
-
Spring框架中的AOP技术----注解方式
利用AOP技术注解的方式对功能进行增强 CustomerDao接口 package com.alphajuns.demo1; public interface CustomerDao { public ...
-
Spring框架的IOC之注解方式的快速入门
1. 步骤一:导入注解开发所有需要的jar包 * 引入IOC容器必须的6个jar包 * 多引入一个:Spring框架的AOP的jar包,spring-aop的jar包 2. 步骤二:创建对应的包结构, ...
-
Spring 框架的AOP之注解的方式
1. 环境搭建 1.1 导入 jar 包 Spring 框架的基本开发包(6个); Spring 的传统AOP的开发包 spring-aop-4.3.10.RELEASE org.aopallianc ...
-
Spring框架的AOP技术之通知类型
1. 通知类型 * @Before -- 前置通知 * @AfterReturing -- 后置通知 * @Around -- 环绕通知(目标对象方法默认不执行的,需要手动执行) * @After - ...
-
spring aop 使用注解方式总结
spring aop的注解方式:和xml的配置方式略有区别,详细如下: 1.首先还是建立需要的切面类:切面类里面定义好切点配置,以及所有的需要实现的通知方法. /** * */ package com ...
-
spring框架之AspectJ的XML方式完成AOP的开发
1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包 * 先引入Spring框架开发的基本开发包 * 再引入Spring框架的AOP的开发包 * spring的传统AOP的开发的包 * sp ...
-
(转)Spring的bean管理(注解方式)
http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
-
Spring框架之AOP源码完全解析
Spring框架之AOP源码完全解析 Spring可以说是Java企业开发里最重要的技术.Spring两大核心IOC(Inversion of Control控制反转)和AOP(Aspect Orie ...
-
Spring框架的AOP的底层实现
1. Srping框架的AOP技术底层也是采用的代理技术,代理的方式提供了两种 1. 基于JDK的动态代理 * 必须是面向接口的,只有实现了具体接口的类才能生成代理对象 2. 基于CGLIB动态代理 ...
随机推荐
-
Google LOGO现代舞舞蹈动画
效果预览:http://hovertree.com/texiao/js/5.htm 截图: HTML文件代码: <!DOCTYPE html> <html xmlns="h ...
-
js event 事件冒泡和事件捕获详细介绍
. 参考: http://www.jb51.net/article/42492.htm 图: 假设一个元素div,它有一个下级元素p.<div> <p>元素</p> ...
-
CSS3动画属性animation的用法
转载: 赞生博客 高端订制web开发工作组 » CSS3动画属性animation的用法 CSS3提供了一个令人心动的动画属性:animation,尽管利用animation做出来的动画没有flash ...
- LabVIEW系列——拍振现象重现
-
AbstractFactory 模式
///////////////////////Product.h////////////// #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class Abstrac ...
-
Ext.Net的一例Ext Undefined解决办法
在运行的产品里发现了一例Ext Undefined报错.经过仔细排查原因是一个Ext.net按钮控件前端显示部分使用了<% if() <%> 动态控制输出Html脚本(有对应的后端 ...
-
322. Coin Change零钱兑换
网址:https://leetcode.com/problems/coin-change/ 典型的动态规划问题,类比背包问题,这就是完全背包问题 问题的阶段:对数值 i 凑硬币 问题的状态:对数值 i ...
-
[转] js在浏览器端对二进制流进行AES加密和解密
开始解密 简单了解一下所用的的AES加密算法,我们用的是AES的CFB加密方式,服务端会提供给我一个key和iv的二进制字节串.密文也是二进制字节串. 我用的加密/解密插件: crypto-js 一般 ...
-
SAP 表类型
最近看了一下ABAP的表类型相关知识,做一个自己的分析总结. ABAP的表类型似乎我感觉只应该有2种,而不是大家说的3种. 从数据存储的原理上来看的.下面我做一个分析. 一般情况下,我们都说ABAP中 ...
-
产品需求文档 PRD
第一轮: 1,文档使用方:UI设计师 2.内容: 根据战略层定义出来产品功能范围, 说明此产品的目的,方便UI设计人员更好的理解产品 产品基本流程 详细 ...