`
ponlya
  • 浏览: 165513 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring3笔记之 AOP

阅读更多

Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理.如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。 若该目标对象没有实现任何接口,则创建一个CGLIB代理。

接口:com.spring305.test.aopSpring.dao.AopSpringDao.java

public interface AopSpringDao {

	public void test();
	public String test2(String name);
	
}

 实现:com.spring305.test.aopSpring.dao.impl.AopSpringDaoImpl.java

public class AopSpringDaoImpl implements AopSpringDao {

	@Override
	public void test() {
		System.out.println(AopSpringDaoImpl.class.getName()+" +=====");
	}

	@Override
	public String test2(String name) {
		System.out.println(AopSpringDaoImpl.class.getName()+" test2() +====="+name);
		return name+" in test2()";
	}

}

定义切面: com.spring305.test.aopSpring.dao.AopInterceptor.java

@Aspect
//切面定义完后交给spring管理,XML中的bean配置来交给Spring管理,或者使用自动扫描来
public class AopInterceptor {

	@Pointcut("execution (* com.spring305.test.aopSpring.dao.impl.AopSpringDaoImpl.*(..))")
	private void anyMethod(){}//采用方法定义的方式来定义切入点的名字,声明一个切入点
	
	//@Before("anyMethod()")//前置通知里参数写切入点名
	@Before("anyMethod()&&args(name)")//前置通知里参数写切入点名
	public void beforeAdvice(String name){//有了参数后,则只针对其中参数相匹配的方法
		//String name
		System.out.println("前置通知"+name);
	}
	
	@AfterReturning(pointcut="anyMethod()",returning="revalue")
	public void returnAdvice(String revalue){
		System.out.println("后置通知"+revalue);
	}
	
	@AfterThrowing(pointcut="anyMethod()",throwing="e")
	public void exceptionAdvice(Exception e){
		System.out.println("例外通知"+e.toString());
	}
	
	@After("anyMethod()")
	public void releaseAction(){
		System.out.println("最终通知");
	}
	 
	@Around("anyMethod()")
	public Object bacicProfiling(ProceedingJoinPoint pjp) throws Throwable{
		System.out.println("环绕通知 进入方法");
		Object result = pjp.proceed();
		System.out.println("环绕通知 退出方法");
		return result;
	}

}

XML:

<aop:aspectj-autoproxy /><!-- 开启切面编程功能 -->
<bean id="myInterceptor" class="com.spring305.test.aopSpring.dao.AopInterceptor"></bean>
<bean id="aopSpringDao" class="com.spring305.test.aopSpring.dao.impl.AopSpringDaoImpl"></bean>

  测试:

@Test//annotation式
public void testAopInterceptorAnnotation(){
	ApplicationContext cxt = new ClassPathXmlApplicationContext("testAopSpring.xml");
	AopSpringDao aop = (AopSpringDao)cxt.getBean("aopSpringDao");
	aop.test();
	aop.test2("123");	
}

 也可以使用XML方式来配置切点;

<bean id="aopSpringDaoImpl"class="com.spring305.test.aopSpring.dao.impl.AopSpringDaoImpl">
</bean>
<bean id="aspectBean"class="com.spring305.test.aopSpring.dao.TheInterceptor">
</bean>

<aop:config>
	<aop:aspect id="asp" ref="aspectBean">
		<aop:pointcut id="thecut" expression="execution(* com.spring305.test.aopSpring.dao.impl.AopSpringDaoImpl.*(..))" />
		<aop:after-returning pointcut-ref="thecut" method="afterReturningRes" returning="result" />
		<aop:around pointcut-ref="thecut" method="around" />
		<aop:after-throwing pointcut-ref="thecut" method="catchException" throwing="e" />
		<aop:after pointcut-ref="thecut" method="after" />
		<aop:before pointcut-ref="thecut" method="before" />
	</aop:aspect>
</aop:config>
 <!-- <aop:pointcut id="thecut" expression="execution(void com.spring305.test.aopSpring.dao.impl.AopSpringDaoImpl.*(java.lang.String,..))" />
  参数中第一个为string,后面的不管了,返回为void的
   -->

 

 

分享到:
评论

相关推荐

    spring aop 学习笔记

    本学习笔记将深入探讨Spring AOP的核心概念、工作原理以及实际应用。 1. **核心概念** - **切面(Aspect)**:切面是关注点的模块化,包含业务逻辑之外的横切关注点,如日志、事务管理。 - **连接点(Join Point...

    spring源码--AOP流程--笔记.docx

    Spring AOP 源码分析笔记 Spring AOP(Aspect-Oriented Programming)是一种编程范式,它允许开发者 modularize cross-cutting concerns,即将横切关注点模块化。AOP 使得开发者可以将一些公共的功能模块化,以便在...

    Spring AOP IOC源码笔记.pdf

    本笔记将深入探讨这两个概念以及它们在Spring中的实现。 1. Spring框架简介: Spring作为一个轻量级的开源框架,旨在简化企业级应用的开发。它通过提供IOC容器,实现了对象的创建、管理和依赖注入,减轻了开发者对...

    Spring学习笔记(16)----使用Spring配置文件实现AOP

    在本篇Spring学习笔记中,我们将深入探讨如何利用Spring配置文件来实现面向切面编程(AOP)。面向切面编程是Spring框架的核心特性之一,它允许我们把关注点分离,将横切关注点(如日志、事务管理、权限控制等)与...

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    学习Spring笔记_AOP_Annotation实现和XML实现

    这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...

    Spring AOP学习笔记

    NULL 博文链接:https://linres.iteye.com/blog/281221

    spring ioc aop mvc boot-学习笔记.docx

    3. **Spring MVC(Model-View-Controller)**: Spring MVC是Spring框架提供的用于构建Web应用的模块。它遵循MVC设计模式,将模型、视图和控制器分离开来,以提高代码的可读性和可维护性。在Spring Boot中,通过`@...

    SSH笔记-AOP

    SSH笔记主要围绕的是Spring框架中的AOP(面向切面编程)特性进行讲解,结合了动态代理和基于注解的配置方式。AOP是Spring框架的一个重要组成部分,它提供了一种模块化和解耦代码的方式,使得我们可以将关注点分离到...

    Spring Aop 学习笔记

    Spring Aop 学习笔记

    Spring学习笔记(精华全记录)

    3. **面向切面编程 (AOP)**:Spring支持面向切面编程,这是一种将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来的编程范式。通过AOP,开发者可以在不修改业务逻辑代码的情况下添加新的功能。 4. **ORM...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    **Spring3笔记** Spring是企业级应用的全面解决方案,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。以下是关键点: 1. **依赖注入(Dependency Injection, DI)**: 通过容器管理组件之间的依赖关系,...

    spring-note spring 读书笔记

    3. **Spring与JDBC的整合**: Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,简化了数据库操作,避免了原始JDBC的繁琐。`spring_dao.txt`可能会讨论这些模板类的用法,包括如何执行SQL查询、事务管理等。 ...

    Spring学习笔记+学习源码.zip

    3. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring AOP允许开发者定义“切面”——跨越多个类的行为或责任。通过切点(Pointcut)和通知(Advice),可以在不修改原有代码的情况下添加新的功能。 4...

    ssh-aop笔记

    SSH-AOP笔记主要涵盖的是Spring、Struts和Hibernate三大框架集成使用时,如何结合Aspect Oriented Programming(面向切面编程)的理念进行应用增强。在Java企业级开发中,SSH是常用的MVC架构,而AOP则是一种编程范式...

    Spring_AOP笔记Spring_AOP笔记

    Spring_AOP,全称为Spring的面向切面编程,是一种编程范式,旨在将关注点分离,使得代码结构更清晰,可维护性更强。在传统的面向对象编程(OOP)中,我们通常会将业务逻辑与系统服务(如日志、事务管理等)混杂在...

    马士兵Spring课堂笔记(超级详细版).pdf

    马士兵Spring课堂笔记(超级详细版) 本资源主要讲解了Spring框架的基础概念和应用,涵盖了面向接口编程、IOC/DI、AOP、Spring应用IOC/DI、Spring应用AOP、Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合、Spring...

    Spring AOP源码笔记

    【Spring AOP源码笔记】 Spring AOP是Spring框架的核心组件之一,它实现了面向切面编程(Aspect-Oriented Programming,简称AOP),允许开发者定义“切面”,这些切面可以封装横切关注点,如日志记录、事务管理等。...

Global site tag (gtag.js) - Google Analytics