- 浏览: 2469688 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
有时候为了去掉对外部系统的依赖, 我们需要针对外部依赖的接口创建一个mock实现类, 当然里面都是空实现, 如果有多个的话, 可能需要写很多的mock实现类, 我们在测试的时候, 发现可以通过spring aop来进行简化, 使用一个aspect来替代多个mock实现. 具体做法如下:
首先是aop的配置文件, 如下:
<?xml version="1.0" encoding="GBK"?> <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:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd" default-autowire="byName"> <!-- aop 拦截器配置 --> <aop:aspectj-autoproxy /> <bean id="mockAspect" class="com.mysoft.mock.aspect.MockAspect" lazy-init="false"> </bean> <aop:config> <aop:aspect ref="mockAspect"> <aop:around pointcut="execution(* com.mysoft.manager.impl.DefaultCategoryManager.*(. .))" method="invokeOfCategory"/> <aop:around pointcut="execution(* com.mysoft.manager.PropertyManager.*(. .))" method="invokeAndReturnNull"/> <aop:around pointcut="execution(* com.mysoft.manager.impl.TxtFileManager.*(. .))" method="invokeAndReturnNull"/> <aop:around pointcut="execution(* com.mysoft.manager.KeywordsChecker.checkNormalKeywords(. .))" method="invokeAndReturnString"/> <aop:around pointcut="execution(* com.mysoft.manager.KeywordsChecker.checkFixKeywords(String, long)) and args(text, categoryId)" method="checkFixKeywords" arg-names="join,text, categoryId"/> </aop:aspect> </aop:config>
这里主要配置了一个用来放实际执行的方面类:MockAspect, 然后是一些pointcut的表达式配置.也就是告诉spring aop, 当碰到某个类, 某个方法的时候, 去执行MockAspect中对应的某个方法.
MockAspect的内容如下:
public class MockAspect implements BeanFactoryAware { private BeanFactory beanFactory; public Object invokeOfCategory(ProceedingJoinPoint join) throws Throwable { CategoryManager categoryManager = (CategoryManager) beanFactory.getBean("categoryManagerMock"); MethodInvocationProceedingJoinPoint call = (MethodInvocationProceedingJoinPoint) join; Signature signature = call.getSignature(); MethodSignature ms = (MethodSignature) signature; String methodName = signature.getName(); Method method = categoryManager.getClass().getMethod(methodName, ms.getParameterTypes()); return method.invoke(categoryManager, join.getArgs()); } public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } /** * * 一个默认的处理, 什么也不做 * * @param join * @return * @throws Throwable */ public Object invokeAndReturnNull(ProceedingJoinPoint join) throws Throwable { return null; } public String invokeAndReturnString(ProceedingJoinPoint join) throws Throwable { return ""; } /** * 对{@link String com.mysoft.manager.KeywordsChecker#checkFixKeywords(String, long)}方法进行切面 * @param join * @param text * @param categoryId * @return * @throws Throwable */ public String checkFixKeywords(ProceedingJoinPoint join, String text, long categoryId) throws Throwable { if ("abc".equals(text)) { return "def"; } return null; } }
这里还需要提到的一个东东, 就是实现了BeanFactoryAware 接口, 主要是为了在一起运行所有的test case的时候, 有时候里面有几个bean需要替换为mock的实现类(比如这里的categoryManagerMock), 这里我们做了一个switch的动作, 让他不是去调用具体的类, 而是我们定义的一个mock实现类.
当然这种做法也不要滥用, 适可而止, 针对一些简单的, 大量的mock, 还是有一定参考意义的.
发表评论
-
spring中map的定义, 包括value为class的定义
2013-03-11 22:26 37<bean id="fieldM ... -
spring的xml string applicationcontext实现
2013-03-06 07:26 2362这里有两种实现方式: import org.springf ... -
对多数据源进行aop声明式事务管理
2009-11-04 18:57 4979当在对数据库表进行横向切分(将一个表的数据拆分为到多个数据库中 ... -
spring + ibatis 源码解读
2009-10-16 11:46 5702最近对ibatis2.1.0.256这个 ... -
编程方式实现sping bean延迟初始化
2009-10-09 10:12 2757在实际开发中, 碰到如下需求场景: 在线上需要spring容 ... -
自定义logger注解, 简化log4j的配置
2009-09-28 20:20 6043上次在参加支付宝架构培训的时候, 看到他们框架中有一个不错的对 ... -
使用spring aop碰到的几个问题及解决办法
2009-09-28 20:09 3938这里的问题只是针对spring 2.0.7 至于其他版本, ... -
本人常用的两种spring aop实现方式
2009-09-28 10:53 3885备忘一下, 基本的用法包括在配置文件中配置pointcut, ... -
spring aspectj的返回值
2009-05-31 08:40 4302最近使用到了基于aspectj的spring aop, aop ... -
spring map bean定义
2009-05-21 12:20 43473一般我们知道在property属性里面定义一个无id的map是 ... -
spring知识总结
2009-05-09 22:11 3253bean属性及构造器参数:直接量(基本类型、Strings类型 ... -
spring @Configration扩展使用一例
2009-02-05 22:03 5794最近对注解了解的比较多, 也在实际项目中实战了一把, 同时对s ... -
spring 注解学习笔记
2009-02-05 21:20 9811spring 注解讲的最详细的文章: http://www.i ... -
spring加载配置文件
2008-12-11 09:27 2348ClassPathXmlApplicationContext ... -
Spring动态数据源路由实现
2008-09-24 09:32 16823简单的翻译, 也算是一篇笔记. 原文:http://blog. ... -
spring aop学习笔记
2008-02-19 14:08 15585理解spring aop的路径:最初级的做法是通过使用代理将业 ...
相关推荐
总结来说,"springAop多数据源"项目涉及到Spring框架的多数据源配置、JdbcTemplate的使用、面向切面编程的应用,以及使用JUnit进行测试。理解并掌握这些技术对于构建灵活、可扩展的Java应用程序至关重要。在实践中,...
通过Spring Boot的AOP(面向切面编程)和拦截器机制,可以方便地实现这些功能。同时,对于复杂的Mock需求,可以利用Mockito等单元测试框架,或者使用专门的Mock服务工具,如WireMock,进一步提升Mock平台的功能和...
在深入解析Spring技术内幕第2版中,会详细探讨Spring框架的核心架构与设计原理,Spring作为一个轻量级的Java平台,提供了全面的编程和配置模型,是企业级Java应用程序开发中广泛使用的技术之一。 Spring的核心特性...
在本压缩包中包含的是Spring MVC 4.3.4版本的jar包,这是一个稳定且广泛使用的版本。这个版本的Spring MVC为非Maven项目提供了方便,避免了开发者为了集成Spring框架而手动下载和配置各种依赖的麻烦。 1. **spring-...
在2.0.8版本中,Spring AOP主要通过代理模式实现,包括JDK动态代理和CGLIB代理,这两种代理方式在源码中都有详细的实现。 `spring-web`和`spring-webmvc`模块是针对Web应用的,前者提供了HTTP请求的处理,如Servlet...
Spring框架的文档详细记录了其架构设计、各模块功能以及如何利用Spring开发企业级应用。 在SpringFrameworkReferenceDocumentation4.3.26文档中,首先介绍了Spring框架的概述,包括开始使用Spring的指南、框架简介...
Spring框架是Java开发中不可或缺的一部分,它以其模块化、松耦合的设计理念,极大地提高了开发效率和代码质量。本文将详细解析Spring 2.0.8版本中的关键知识点,包括核心组件、Bean管理以及Web支持。 1. **Spring ...
如果项目是一个完整的 Web 应用,并且将全程使用 Spring 框架,推荐使用单个完整的 `spring.jar` 文件,因为它包含了除 `spring-mock.jar` 外的所有 Jar 包内容。 如果只需要使用 Spring 的 IoC/DI 容器特性,则只...
- **设计哲学**:强调轻量级、非侵入性以及对POJO的支持,通过IoC(Inverse of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)等技术实现了这一目标。 - **反馈与贡献**:鼓励社区成员提出...
Spring框架以其依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)的核心特性,极大地简化了Java应用程序的开发,特别是对于企业级应用。 一、Spring框架概述 Spring是一个...
`cglib-nodep-2.1_3.jar` 是一个代码生成库,Spring使用它来动态创建子类以实现AOP代理和Mock对象。 `org.springframework.aop-3.0.3.RELEASE.jar` 包含了Spring的AOP模块,提供切面的定义、匹配和执行,是实现面向...
- **灵活性**:Spring Web MVC框架非常灵活,用户可以使用任何对象作为命令对象或者表单支持对象,而无需实现特定的接口或继承特定的类。 - **数据绑定**:Spring的数据绑定机制非常强大,能够自动将请求参数绑定到...
8. **spring-test-5.0.2.RELEASE-javadoc.jar**:为Spring应用提供测试支持,包括测试注解、测试上下文框架和Mock对象,帮助开发者编写可测试的代码。 9. **spring-webflux-5.0.2.RELEASE-javadoc.jar**:处理...
由于提供的文件内容中并没有包含实质性的技术内容,仅是重复的网址,并没有涉及《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》一书的具体知识,我将基于书名和对Spring框架的理解,详细阐述Spring的...
Spring 的核心设计理念是依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。在这个“spring-framework基本包”中,我们主要探讨 Spring 框架的基础内容,包括 IoC 容器、...
- `spring-aop-5.2.6.RELEASE.jar`:包含AOP相关的实现。 - `spring-beans-5.2.6.RELEASE.jar`:Bean工厂和bean管理相关功能。 - `spring-context-5.2.6.RELEASE.jar`:扩展了Core Container,提供应用上下文和服务...
而如果你的项目需要实现面向切面的特性,那么Spring AOP则应该被包含在内。 “myjar-spring”可能指的是一个自定义的Spring库,它可能包含了对Spring框架的一些特定定制或者额外的功能,以适应特定项目的需求。在...
Spring AOP使用代理模式实现,可以是JDK动态代理或CGLIB代理。 3. **bean的定义与管理**:在Spring中,应用组件被定义为bean,它们可以通过XML、注解或者Java配置来定义。Bean可以有各种作用域,如单例、原型、请求...
在"spring-aop"目录下,通常会包含实现AOP功能的类库,如spring-aop.jar,它提供了对切面、通知、代理等概念的支持,使得代码更加模块化,提高了代码的复用性和可维护性。 2. **spring-jdbc-tx**: 这个部分涉及到...
在`org.springframework.jdbc`包下,你可以看到Spring如何简化了JDBC的使用。同时,`org.springframework.orm`和`org.springframework.oxm`包分别处理ORM和OXM的集成。 4. **MVC(Model-View-Controller)** ...