Spring使用AspectJ注解和XML配置实现AOP
本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP
下面是使用AspectJ注解实现AOP的Java Project
首先是位于classpath下的applicationContext.xml文件
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 启用AspectJ对Annotation的支持 -->
<
aop:aspectj-autoproxy
/>
<
bean
id
=
"userManager"
class
=
"com.jadyer.annotation.UserManagerImpl"
/>
<
bean
id
=
"securityHandler"
class
=
"com.jadyer.annotation.SecurityHandler"
/>
</
beans
>
package
com.jadyer.annotation;
public
interface
UserManager {
public
void
addUser(String username, String password);
public
void
delUser(
int
userId);
public
String findUserById(
int
userId);
public
void
modifyUser(
int
userId, String username, String password);
}
/**
* 上面的UserManager是服务层的接口
* 下面的UserManagerImpl是服务层接口的实现类
*/
package
com.jadyer.annotation;
public
class
UserManagerImpl
implements
UserManager {
public
void
addUser(String username, String password) {
System.out.println(
"------UserManagerImpl.addUser() is invoked------"
);
}
public
void
delUser(
int
userId) {
System.out.println(
"------UserManagerImpl.delUser() is invoked------"
);
}
public
String findUserById(
int
userId) {
System.out.println(
"------UserManagerImpl.findUserById() is invoked------"
);
return
"铁面生"
;
}
public
void
modifyUser(
int
userId, String username, String password) {
System.out.println(
"------UserManagerImpl.modifyUser() is invoked------"
);
}
}
package
com.jadyer.annotation;
import
org.aspectj.lang.annotation.After;
import
org.aspectj.lang.annotation.Aspect;
import
org.aspectj.lang.annotation.Pointcut;
@Aspect
public
class
SecurityHandler {
/**
* 定义Pointcut
* @see Pointcut的名称为addAddMethod(),此方法没有返回值和参数
* @see 该方法就是一个标识,不进行调用
*/
@Pointcut
(
"execution(* add*(..))"
)
//匹配所有以add开头的方法
private
void
addAddMethod(){};
/**
* 定义Advice
* @see 表示我们的Advice应用到哪些Pointcut订阅的Joinpoint上
*/
//@Before("addAddMethod()")
@After
(
"addAddMethod()"
)
private
void
checkSecurity() {
System.out.println(
"------【checkSecurity is invoked】------"
);
}
}
package
com.jadyer.annotation;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Spring对AOP的支持:采用Annotation方式
* @see -------------------------------------------------------------------------------------
* @see Spring提供的AOP功能还是很强大的,支持可配置,它的默认实现使用的就是JDK动态代理
* @see 使用Spring的AOP不需要继承相关的东西,也不需要实现接口
* @see 但有个前提条件:由于是JDK动态代理,所以若想生成代理,该类就必须得实现一个接口才行
* @see 如果该类没有implements接口的话,仍去使用Spring的默认AOP实现时,那么就会出错
* @see 通常需要生成代理的类都是服务层的类,所以通常都会抽一个接口出来。即养成面向接口编程的习惯
* @see -------------------------------------------------------------------------------------
* @see 采用Annotation方式完成AOP示例的基本步骤,如下
* @see 1、Spring2.0的依赖包配置。新增Annotation支持
* @see * SPRING_HOME//dist//spring.jar
* @see * SPRING_HOME//lib//log4j//log4j-1.2.14.jar
* @see * SPRING_HOME//lib//jakarta-commons//commons-logging.jar
* @see * SPRING_HOME//lib//aspectj//*.jar
* @see 2、将横切性关注点模块化,建立SecurityHandler.java
* @see 3、采用注解指定SecurityHandler为Aspect
* @see 4、采用注解定义Advice和Pointcut
* @see 5、启用AspectJ对Annotation的支持,并且将目标类和Aspect类配置到IoC容器中
* @see 6、开发客户端
* @see -------------------------------------------------------------------------------------
*/
public
class
Client {
public
static
void
main(String[] args) {
ApplicationContext factory =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
UserManager userManager = (UserManager)factory.getBean(
"userManager"
);
userManager.addUser(
"张起灵"
,
"02200059"
);
}
}
首先是位于src根目录中的applicationContext-cglib.xml文件
.....
Spring使用AspectJ注解和XML配置实现AOP的更多相关文章
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- [spring]Bean注入——使用注解代替xml配置
使用注解编程,主要是为了替代xml文件,使开发更加快速. 一.使用注解前提: <?xml version="1.0" encoding="UTF-8"?& ...
- spring启动,spring mvc ,要不要xml配置,基于注解配置
老项目是09-11年搞的,用的是spring+struts2,没有用注解,全xml配置.web.xml中也配置了一大堆. 现在启动新项目,在项目中用spring+springmvc ,主要用注解,也用 ...
- MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- @ComponentScan注解及其XML配置
开发中会经常使用包扫描,只要标注了@Controller.@Service.@Repository,@Component 注解的类会自动加入到容器中,ComponentScan有注解和xml配置两种方 ...
- Spring声明式事务(xml配置事务方式)
Spring声明式事务(xml配置事务方式) >>>>>>>>>>>>>>>>>>>& ...
- spring与hibernate注解及XML方式集成
spring与hibernate注解及XML方式集成 Hibernate Xml方式 该种方式需要在sessionFactory中引入对应的hbm.xml文件,样例如下: <!-- spring ...
- mybatis使用注解替代xml配置,动态生成Sql
mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办? mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectPr ...
- 基于XML配置的AOP实现日志打印
Spring中可以使用注解或XML文件配置的方式实现AOP.1.导入jar包 com.springsource.net.sf.cglib -2.2.0.jar com.springsource.org ...
随机推荐
- FPGA连接
别人推荐,暂时存这了: http://www.eepw.com.cn/news/fpga
- Vim 手记:语法高亮
本文覆盖范围: Vim 的着色方案 设置高亮 选择颜色 语法高亮除错 每个程序员的文本编辑器缺少了语法高亮.特殊关键字和短语着色,都是不完整的.语法高亮突出了文档的结构,帮助发现排字错误,利于调试,整 ...
- linux 开机自启
cd /home/dpf 1.vi startup.sh #!/bin/shecho "hello world" >> /home/dpf/test.txt vi mq ...
- 升级nodejs至最新
网上找出了很多升级nodejs版本的方法,都不太好用,直至发现这个: 在命令行窗口中执行:where node: 然后在nodejs官网中下载最新版本,将刚才目录下node.exe替换掉: 最后执行: ...
- codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
题目链接:http://www.codeforces.com/problemset/problem/118/A题意:字符串转换……C++代码: #include <string> #inc ...
- php 建立 搜索 分词树
<?php /** * @author: xiaojiang 20140107 * php 建立分词树 * */ class Tree{ public $w = ''; public $subT ...
- 例说hg(五)————创建repository
本文由博主原创,转载请注明出处(保留此处和链接): IT人生(http://blog.csdn.net/robinblog/article/details/17933747) 有很多网站提供了免费的M ...
- canvas练习 - 圆
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mouseleave,mouseout 和mouseover ,mouseenter区别
鼠标离开事件: mouseleave:只有鼠标离开指定元素时才会触发; mouseout 鼠标离开指定元素或内部子元素都会触发; 鼠标在上事件: mouseover:只有鼠标进入指定元素时才会触发; ...
- [原]linux下将网卡设置为混杂模式
设置为混杂模式ifconfig eth2 promisc取消设置ifconfig eth2 -promisc ------------------------------------------ 下面 ...