`

spring_aop模板

阅读更多
applicationContext.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<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"
	xmlns:context="http://www.springframework.org/schema/context"
	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/context   
   http://www.springframework.org/schema/context/spring-context-2.5.xsd
">


	<aop:aspectj-autoproxy /> <!-- 支持注解方式 -->
	
	
	<context:component-scan  base-package="com.bjsxt"/>
	
</beans>

-----------------------------------------------------------
   常用切面编程的模板文件用时拷贝一下:
package com.bjsxt.test.spring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 日志拦截器
 */
@Aspect
@Component
public class LogInterceptor {

//	public User add(User user)
//	@Pointcut("execution(public  *  com.bjsxt.test.spring.aop.*.add*(..))")
	
	@Pointcut("execution(public  *  com.bjsxt.test.spring.aop.*.get*(..))")  //声明一个名字为log的切入点
	private void log(){//如果其他的地方要引用这个切入点,,就写这个方法名
	}
	
	
	@Before("log()"+"&&args(user)")   //使用pointcut-->log .前置通知.处理传入的参数跟下面的形参保持一致即可。
	private void before(User user){
		System.out.println("方法执行前:"+user.getUname());
		System.out.println("方法执行前!");
	}
	
	@After("log()")   //最终后置通知。不管有无异常,最终都会执行!
	private void after(){
		System.out.println("方法执行后!");
	}

	@AfterReturning("log()")  //方法正常结束,后置通知
	private void afterReturning(){
		System.out.println("方法执行后!after returning!");
	}

	@AfterThrowing("log()")    //抛出异常会执行,异常通知
	private void afterThrowing(){
		System.out.println("方法执行后!after throwing!");
	}
	
	
	@Around("log()")   //环绕通知在一个方法执行之前和之后执行
	private Object around(ProceedingJoinPoint pjp){
		System.out.println("环绕通知,方法执行前!");
		Object obj = null;
		try {
			obj = pjp.proceed();//出调用真正的方法
		} catch (Throwable e) {
			e.printStackTrace();
		}
		System.out.println("环绕通知,方法执行后!");
		return obj;
	}
	
}


源文件下载地址:http://pan.baidu.com/share/link?shareid=1804614721&uk=1057836303
----------------------------------下面是配置文件方式实现切面编程
<?xml version="1.0" encoding="UTF-8"?>
<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"
	xmlns:context="http://www.springframework.org/schema/context"
	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/context   
		http://www.springframework.org/schema/context/spring-context-2.5.xsd
">

	<aop:aspectj-autoproxy /> <!-- 支持注解方式 -->
	<context:component-scan  base-package="com.bjsxt"/>
	
	<!-- 采用配置方式使用AOP -->
	<bean id="logInterceptor" class="com.bjsxt.spring.aop.LogInterceptor"></bean>
	
	<aop:config >
		<!--定义切点 名字log  -->
		<aop:pointcut expression="execution(public !java.lang.String com.bjsxt.spring.aop.UserDaoImpl.*(com.bjsxt.spring.aop.User,..))" id="log"/>
		
		<!-- 定义切面   logAspect-->
		<aop:aspect id="logAspect" ref="logInterceptor">
		
		<!-- 定义前置通知  -->
		<!-- arg-names="user,age,name,test" 多参数   arg-names 指定before参数名   -->
		  	<aop:before method="before" arg-names="user" pointcut="execution(!java.lang.String com.bjsxt.spring.aop.UserDaoImpl.add(..)) and args(user)" />
		  <!-- 后置通知 -->
			<aop:after method="after"  pointcut-ref="log" />
			
			<aop:after-throwing method="afterThrowing" pointcut-ref="log"/>
			
			<aop:after-returning method="afterReturning" pointcut-ref="log"/>
			
			<aop:around method="around"  pointcut-ref="log"/>
		</aop:aspect>
		 
		
	</aop:config>
	
</beans>

----------------------------------------------
package com.bjsxt.spring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/**
 * 日志拦截器
 */


public class LogInterceptor {

//	@Pointcut("execution(!java.lang.String com.cssxt.spring.aop.UserDaoImpl.add(com.cssxt.spring.aop.User,..))")  //生命一个名字为log的切入点
	private void log(){
	}
	
//	@Before("log()"+"&&args(user)")   //使用pointcut-->log .前置通知.处理传入的参数跟下面的形参保持一致即可。
	private void before(User user){
		System.out.println("方法执行前:"+user.getUname());
		System.out.println("方法执行前!");
	}
	
//	@After("log()")   //最终后置通知。不管有无异常,最终都会执行!
	private void after(){
		System.out.println("方法执行后!");
	}

//	@AfterReturning("log()")  //方法正常结束,后置通知
	private void afterReturning(){
		System.out.println("方法执行后!after returning!");
	}

//	@AfterThrowing("log()")    //抛出异常会执行,异常通知
	private void afterThrowing(){
		System.out.println("方法执行后!after throwing!");
	}
	
	
//	@Around("log()")   //环绕通知在一个方法执行之前和之后执行
	private Object around(ProceedingJoinPoint pjp){
		System.out.println("环绕通知,方法执行前!");
		Object obj = null;
		try {
			obj = pjp.proceed();
		} catch (Throwable e) {
			e.printStackTrace();
		}
		System.out.println("环绕通知,方法执行后!");
		return obj;
	}
	
}
分享到:
评论

相关推荐

    J2EE框架_笔记_c

    49-Spring_JDBC模板笔记 50-Spring_Struts、Hibernate支持笔记 51-52使用Struts + Spring + Hibernate完成用户登陆笔记 53使用Struts + Spring + Hibernate完成分页笔记 54留言管理程序_Struts + Spring + Hibernate...

    J2EE框架_笔记_b

    49-Spring_JDBC模板笔记 50-Spring_Struts、Hibernate支持笔记 51-52使用Struts + Spring + Hibernate完成用户登陆笔记 53使用Struts + Spring + Hibernate完成分页笔记 54留言管理程序_Struts + Spring + Hibernate...

    J2EE三大框架_笔记_a

    49-Spring_JDBC模板笔记 50-Spring_Struts、Hibernate支持笔记 51-52使用Struts + Spring + Hibernate完成用户登陆笔记 53使用Struts + Spring + Hibernate完成分页笔记 54留言管理程序_Struts + Spring + Hibernate...

    java课件-14-Spring-AOP

    Spring容器简介——AOP AOP核心概念 Spring AOP的使用 Spring AOP常见用法 示例代码

    基于java的企业级应用开发:Spring AOP简介.ppt

    Context-support模块:提供了对第三方库嵌入Spring应用的集成支持,比如缓存(EhCache、Guava、JCache)、邮件服务(JavaMail)、任务调度(CommonJ、Quartz)和模板引擎(FreeMarker、JasperReports、速率)。 SpEL模块:...

    设计模式之动态代理与spring的aop编程

    NULL 博文链接:https://shaw-n-lu.iteye.com/blog/1747124

    javaEE框架笔记,识货人下

    49-Spring_JDBC模板笔记.pdf 50-Spring_Struts、Hibernate支持笔记.pdf 51-52使用Struts + Spring + Hibernate完成用户登陆笔记.pdf 53使用Struts + Spring + Hibernate完成分页笔记.pdf 54留言管理程序_Struts + ...

    spring4.1核心包

    1. spring-aop-4.1.1.RELEASE.jar Spring面向切面编程,提供AOP实现。Spring Beans之上将横切关注点模块化 2. spring-aspects-4.1.1.RELEASE.jar 提供的对AspectJ框架的整合,也是A面向切面编程。 AspectJ可用于...

    Spring开发指南

    Spring初探 准备工作 构建Spring基础代码 Spring 基础语义 Dependency Injection 依赖注入的几种实现类型 ... Dynamic Proxy 与Spring AOP CGLib 与 Spring AOP AOP 应用 DAO Support Remoting

    spring jar 包详解

    可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如 Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。...

    PL_Java_Spring框架_学习笔记.xmind

    内容: Spring资源管理 Spring表达式语言 ...AOP切面编程-代理功能的加强 Spring与JMS消息组件 Spring与WebService Spring与Redis数据库 JDBC操作模板 Spring事务管理 SpringDataJPA SpringMVC SpringSecurity

    Spring-Reference_zh_CN(Spring中文参考手册)

    6.4.2. Spring AOP中使用@AspectJ还是XML? 6.5. 混合切面类型 6.6. 代理机制 6.7. 编程方式创建@AspectJ代理 6.8. 在Spring应用中使用AspectJ 6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1....

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如 Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。...

    基于spring boot 2实现的各类小例子。有aop日志,发送邮件,模板导出excel,模板导出word.zip

    基于spring boot 2实现的各类小例子。有aop日志,发送邮件,模板导出excel,模板导出word

    最新最全的spring开发包

    可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如 Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。...

    跟我学spring3(1-7)

    【第七章】 对JDBC的支持 之 7.2 JDBC模板类 ——跟我学spring3 【第七章】 对JDBC的支持 之 7.3 关系数据库操作对象化 ——跟我学spring3 【第七章】 对JDBC的支持 之 7.4 Spring提供的其它帮助 ——跟我学...

    基于SpringCloud开发的在线教育系统

    业务层:Spring IOC、Aop事务控制、Spring Task任务调度、Feign、Ribbon、Spring AMQP、Spring Data Redis等。 控制层:Spring MVC、FastJSON、RestTemplate、Spring Security Oauth2+JWT等 微服务治理:Eureka、...

    java开发oa办公系统源码-SpringBoot-Redis-Spring-AOP-:SpringBoot-Redis-Spring-AOP

    JeePlatform项目是一款以Activiti为工作流引擎,以Spring Framework为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台,基于本平台可以实现快速开发,实现企业信息管理的...

    掌握Spring设计模式:Java工程师必备指南

    代理模式和观察者模式在Spring AOP和事件驱动模型中得到了广泛应用,提供了强大的切面和事件处理能力。策略模式和模板方法模式则分别提供了资源访问的灵活性和统一处理逻辑的框架。最后,责任链模式在Spring的AOP...

Global site tag (gtag.js) - Google Analytics