原文发表处:http://blog.csdn.net/zuoxiaolong8810/article/details/8917853
下面介绍下spring中的AOP核心接口。
Advice体系:
Spring采用AOP联盟的Advice作为超级接口,扩展了很多子接口,比如BeforeAdvice,AfterAdvice等等,稍后以AfterReturningAdvice为例,讨论下spring的通知体系。
Pointcut接口:
spring采用Pointcut作为切点的抽象,其中有一个方法返回一个MethodMatcher,作用很明显,就是说切点决定了要切入哪些方法。这里其实是定义了一个匹配规则。比如正则匹配,可以只匹配前缀为save的方法等等。
Advisor:
通知器或者说通知者,我们从现实角度来说,通知者当然需要知道要通知什么。所以Advisor依赖于Advice,而Advisor旗下的子接口PointAdvisor还依赖于Pointcut,也就是说这个接口更确切的定位应该是包含了要通知谁和要通知什么,也就是说要能获得Advice和Pointcut。
下面我们先用一个例子说明spring的AOP是如何工作的,在spring的bean中有一种特殊的bean,叫FactoryBean。这并不是一个普通的bean,而是用来产生bean的一个bean。这样说起来有点绕口,但这个接口就是用来做这个事的,它是为了实现一系列特殊加工过的bean而产生的接口。
比如AOP中,我们其实就是要对一个bean进行增强,进行加工,让它在运行的过程中可以做一些特殊的事情。
ProxyFactoryBean就是一个为了AOP实现的特殊的FactoryBean,它的作用很明显就是产生proxy的bean,也就是被我们增强过的bean,在这里给出它的源码。
下面是一个详细的例子,简单是解释AOP是怎么运行的:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="testAdvisor" class="com.springframework.aop.test.TestAdvisor"></bean> <bean id="testTarget" class="com.springframework.aop.test.TestTarget"></bean> <bean id="testAOP" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="targetName"> <value>testTarget</value> </property> <property name="interceptorNames"> <list> <value>testAdvisor</value> </list> </property> </bean> </beans>
public class TestTarget{ public void test() { System.out.println("target.test()"); } public void test2(){ System.out.println("target.test2()"); } }
public class TestAdvisor implements PointcutAdvisor{ public Advice getAdvice() { return new TestAfterAdvice(); } public boolean isPerInstance() { return false; } public Pointcut getPointcut() { return new TestPointcut(); } }
public class TestPointcut implements Pointcut{ public ClassFilter getClassFilter() { return ClassFilter.TRUE; } public MethodMatcher getMethodMatcher() { return new MethodMatcher() { public boolean matches(Method method, Class<?> targetClass, Object[] args) { if (method.getName().equals("test")) { return true; } return false; } public boolean matches(Method method, Class<?> targetClass) { if (method.getName().equals("test")) { return true; } return false; } public boolean isRuntime() { return true; } }; } }
public class TestAOP { public static void main(String[] args) { ApplicationContext applicationContext = new FileSystemXmlApplicationContext("classpath:beans.xml"); TestTarget target = (TestTarget) applicationContext.getBean("testAOP"); target.test(); System.out.println("------无敌分割线-----"); target.test2(); } }
运行结果如下:
target.test() after TestTarget.test() ------无敌分割线----- target.test2()
相关推荐
网上找了很多例子多数都不能运行。包括after,before,round,throw切入,可对类直接拦截,不需要定义接口文件,自己研究了2天整理出来的。 Spring AOP 的完整例子,可直接运行。带jar包。
- `spring_integration_jdbc` 文件夹提供了 Spring 与 JDBC 结合使用的例子。Spring 提供了 JdbcTemplate 和 NamedParameterJdbcTemplate,简化了 SQL 查询和数据访问操作。 6. **Spring 用户模块** - `spring_...
此外,Spring.NET 还支持 AOP(面向切面编程),允许开发者在不修改源代码的情况下,向现有代码添加新的功能或监控行为。AOP 在 Spring.NET 中主要通过代理模式实现,可以用于事务管理、日志记录、性能度量等场景。 ...
9. 其他AOP框架:文档提及除了Spring AOP以外,还有JAC(Java Aspect Components)和Jboss AOP等其他AOP框架,这些都是Java生态中实现AOP的工具。 通过这些知识点,可以看出文档主要围绕Java动态代理的原理及其在...
在我们的例子中,我们需要在pom.xml中添加Spring、MyBatis以及相关库的依赖。 接下来,Spring框架是Java领域的一个全功能容器,用于处理对象的依赖注入、AOP(面向切面编程)、事务管理等。在多对多和多对一的关系...
config|[Spring Cloud Alibaba(二)配置中心多项目、多配置文件、分目录实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README2.md) Sentinel|[Spring Cloud Alibaba(三)Sentinel...
### Spring Roo 使用文档知识点概述 #### 一、Spring Roo ...以上是根据给定的 Spring Roo 文档摘要整理出的关键知识点,通过这些知识点的学习和掌握,可以帮助开发者更高效地使用 Spring Roo 构建高质量的应用程序。
项目创建完成后,我们需要在WEB-INF目录下创建一个名为lib的文件夹,然后将所需的Spring相关jar包(如spring-aop、spring-beans、spring-context、spring-core、spring-expression、spring-web、spring-webmvc以及...
- 解释Spring的IoC和AOP概念并给出实际应用例子 - 描述一个完整的Struts 2请求处理流程 - Hibernate的懒加载和立即加载的区别,以及如何配置 - MyBatis是如何通过XML或注解实现动态SQL的 - SSHM整合中,如何...
这个就不再详述,具体请看下面,经过详细排查,终于分析完毕相关包的作用,并整理完一套完整的包(由于大小问题没有上传,附图): struts2的包必须版本一致 不能即用2.1.6的包 又用到了2.1.8的包 ,其他版本类似...
1. `applicationContext.xml`:Spring的配置文件,用于定义bean、事务管理和AOP(面向切面编程)等。在实际应用中,你需要根据项目需求来定制这个文件,例如配置数据源、SessionFactory、事务管理规则等。 2. ...
1. **Spring框架**:Spring是Java企业级应用的核心框架,提供了IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)两大核心特性。在CRM项目中,Spring负责管理各个组件的...
Spring是一个强大的框架,提供依赖注入、AOP(面向切面编程)等功能,而MyBatis则是一个轻量级的持久层框架,专注于SQL映射和数据库交互。将两者整合可以实现高效、灵活的数据访问和业务逻辑处理。 首先,Spring...
在这个SSH整合的例子中,Spring框架负责管理依赖项,提供事务控制,以及实现AOP(面向切面编程);Struts则作为MVC(模型-视图-控制器)架构的前端控制器,处理HTTP请求并调用业务逻辑;而Hibernate则作为数据持久层...
1. Spring框架:依赖注入、AOP、事务管理、Spring Boot等核心概念。 2. MyBatis:SQL映射、动态SQL、缓存机制,以及MyBatis-Spring的整合。 3. 数据库:SQL优化、索引原理、事务与锁机制,以及NoSQL数据库的使用。 4...
14. **Spring框架**:熟悉Spring的核心概念,如依赖注入(DI)和面向切面编程(AOP),以及Spring Boot和Spring MVC的使用。 15. **数据库操作**:掌握SQL语言,了解JDBC的使用,以及ORM框架如Hibernate和MyBatis的...
【SSHLogin实例(下载)[整理].pdf】文档主要介绍了MVC设计模式以及SSH(Struts+Spring+Hibernate)框架在Web应用中的使用,包括各组件的功能、优缺点以及一个简单的SSH登录实例。 **MVC模式** MVC模式是一种常见的...
3. **面向切面编程(AOP)**:Spring框架提供了AOP支持,可以方便地实现如日志记录、事务管理等跨切面的功能。 4. **强大的数据绑定**:Spring MVC自动处理HTTP请求和响应,支持数据验证和类型转换。 **Maven** ...
6. **笔记与教学材料**(notes):这里可能是作者在学习过程中整理的笔记,可能涵盖了各个知识点的解析、例子和问题解答,是很好的学习参考资料。 7. **Spring Batch**:这是一个强大的批处理框架,用于执行大规模...
Spring框架是Java Web开发中的重要组件,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,简化了应用程序的构建和管理。Spring MVC是Spring框架的一部分,专门用于Web开发,提供了一种模型-视图-控制器(MVC)...