Spring AOP的实现
2016-04-14 14:43
429 查看
在这里只要记录一下AOP的注解@aspect和配置的写法:
基于配置的applicationContext.xml的配置:
<bean id="one" class="com.ha.logAOP.LogAspect"/>
<aop:config>
<aop:aspect id="oneAop" ref="one">
<aop:pointcut id="target" expression="execution(* com.ha.dao.*.*(..))"/>
<aop:before method="doBeforeDAO" pointcut-ref="target"/>
<aop:after method="doAfterDAO" pointcut-ref="target"/>
</aop:aspect>
</aop:config>
简单解释一下:expression主要是切入点的配置:execution(* com.ha.dao.*.*(..))在com.ha.dao的任意方法。execution(* com.ha.dao. .*.*(..))在com.ha.dao的子包或者包下的任意方法。before method=“”表示前置方法。after method=“”表示后置方法。
一个简单的例子:
public class LogAspect {
public void doBeforeDAO(JoinPoint joinPoint) {
System.out.println("before");
}
public void doAfterDAO(JoinPoint joinpoint){
System.out.println("after");
}
}
第二种可以选择用注解:这里主要用的是@aspect标记:
@Component
@Aspect
public class LogAspect {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Before("execution(* com.ha.dao.*.*(..))")
public void doBeforeDAO(JoinPoint joinPoint) {
System.out.println("before");
}
@After("execution(* com.ha.dao.*.*(..))")
public void doAfterDAO(JoinPoint joinpoint){
System.out.println("after");
}
}
这个需要在applicationContext.xml中加入:<aop:aspectj-autoproxy proxy-target-class="true"/>就搞定了。
注如果用配置出现:java.lang.ClassCastException: $Proxy7,在applicationContext.xml中加入<aop:aspectj-autoproxy proxy-target-class="true"/>。
要想给某个切面中影响方法的结果,可以考虑用@around这个注解来实现。
其实也可以使用@pointcut用某个方法(方法1上)来定义切面,然后用@before("方法1")或@after()或@around()来实现切面拦截。
基于配置的applicationContext.xml的配置:
<bean id="one" class="com.ha.logAOP.LogAspect"/>
<aop:config>
<aop:aspect id="oneAop" ref="one">
<aop:pointcut id="target" expression="execution(* com.ha.dao.*.*(..))"/>
<aop:before method="doBeforeDAO" pointcut-ref="target"/>
<aop:after method="doAfterDAO" pointcut-ref="target"/>
</aop:aspect>
</aop:config>
简单解释一下:expression主要是切入点的配置:execution(* com.ha.dao.*.*(..))在com.ha.dao的任意方法。execution(* com.ha.dao. .*.*(..))在com.ha.dao的子包或者包下的任意方法。before method=“”表示前置方法。after method=“”表示后置方法。
一个简单的例子:
public class LogAspect {
public void doBeforeDAO(JoinPoint joinPoint) {
System.out.println("before");
}
public void doAfterDAO(JoinPoint joinpoint){
System.out.println("after");
}
}
第二种可以选择用注解:这里主要用的是@aspect标记:
@Component
@Aspect
public class LogAspect {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Before("execution(* com.ha.dao.*.*(..))")
public void doBeforeDAO(JoinPoint joinPoint) {
System.out.println("before");
}
@After("execution(* com.ha.dao.*.*(..))")
public void doAfterDAO(JoinPoint joinpoint){
System.out.println("after");
}
}
这个需要在applicationContext.xml中加入:<aop:aspectj-autoproxy proxy-target-class="true"/>就搞定了。
注如果用配置出现:java.lang.ClassCastException: $Proxy7,在applicationContext.xml中加入<aop:aspectj-autoproxy proxy-target-class="true"/>。
要想给某个切面中影响方法的结果,可以考虑用@around这个注解来实现。
其实也可以使用@pointcut用某个方法(方法1上)来定义切面,然后用@before("方法1")或@after()或@around()来实现切面拦截。
相关文章推荐
- java深拷贝和浅拷贝
- spring mvc+Mybatis整合shiro 第二章Realm
- Java集合关于ArrayList
- Java 对HashMap<String,Double>排序
- Java集合(四):Map映射
- JAVA基础(22) web.xml配置详解一
- spring mvc Json转换
- Java Classloader机制解析
- springmvc 混合视图解决方案
- java集合类Stack类
- 生成时间加流水号的编码
- 谈谈eclipse使用技巧二
- EasyEclipse for php .project文件
- eclipse使用技巧一
- Java反射机制--佐证
- Java版仿QQ验证码风格图片验证码
- myeclipse 中项目有红色感叹号的问题解决
- JSP对JavaBean的各种常用操作方法总结
- 160414JavaSE环境搭建
- struts2中改变struts.xml默认路径