最近在做AspectJ实现的日志模块,在spring配置中加入了<aop:aspectj-autoproxy/>,之后发现,只要有用到自定义注解的类,某些方法经MVC请求时就报空指针错误. [症状]同一个类,该类中某些方法使用了AspectJ处理的自定义注解,结果某些方法访问正常,另一些方法报空指针错误.进一步debug发现autowired的对象为空,即注入失败.去掉<aop:aspectj-autoproxy/>一切正常. [排查]1.观察问题类中方法的差异,难道说代理类要严格…
1.Spring AOP与AspectJ Spring AOP与AspectJ相比,是一个功能比较弱的AOP解决方案. AspectJ提供了许多它不能支持的类型切点,如在创建对象时应用通知,构造器切点很方便. 但是,不像某些其它面向对象语言中的构造器,Java构造器不同于其他的正常方法,这使得Spring基于代理的AOP无法把通知应用于对象的创建过程. 2.通过Spring为AspectJ的切面注入依赖 对多数功能来讲,AspectJ与Spring是相互独立的. 但是,精心设计切有意义的切面可能…
1.ModelAndView  既带着数据,又返回视图路劲 2.String 返回试图路径  model带数据  (官方或企业推荐使用此种方式 ,此方法符合解耦思想,即数据,视图,分离 MVC) 3.void   使用ajax请求是合适使用此方法   ,ajax返回json数据不需要跳转页面(response)…
PowerMock扩展自Mockito,实现了Mockito不支持的模拟形式的单元测试.PowerMock实现了对静态方法.构造函数.私有方法以及final方法的模拟支持,对静态初始化过程的移除等强大的功能.(官方) 接下来,通过实例来实现对SpringMVC的Controller层的方法模拟测试. 一.maven引入PowerMock相应的Jar文件 <dependency> <groupId>org.powermock</groupId> <artifactI…
面向切面编程的术语: 切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象 通知(Advice): 切面必须要完成的工作 目标(Target): 被通知的对象 代理(Proxy): 向目标对象应用通知之后创建的对象 连接点(Joinpoint):程序执行的某个特定位置:如类某个方法调用前.调用后.方法抛出异常后等,连接点是程序类中客观存在的事务 切点(pointcut):每个类都拥有多个连接点,例如 ArithmethicCalculator类中 的所有方法实际上都…
什么是AOP?基本概念切面(aspect):横切关注点被模块化的特殊对象.通知(advice):切面必须要完成的工作.切面中的每个方向称之为通知.通知是在切面对象中的.目标(target):被通知的对象.代理(proxy):向目标对象应用通知后创建的对象. 连接点(joinpoint):目标对象的程序执行的某个特定位置.如某个方法调用前,调用后的位置.包括两个信息:1.目标程序的哪个方法?2.方法执行 前还是执行后?切点(pointcut):每个类会有多个连接点,AOP通过切点定位到特定的边接点…
用 AspectJ 注解声明切面: 要在 Spring 中声明 AspectJ 切面 , 只需要在 IOC 容器中将切面声明为 bean 实例.当在 Spring IOC 容器中初始化 AsjectJ 切面之后 , Spring IOC 容器就会为那些与 AspectJ 切面相匹配的 bean 创建代理. 在 ApectJ 注解中 , 切面只是一个带有 @Asject 注解的 Java 类. 通知是标注有某种注解的简单的 Java 方法. AspectJ 支持 5 种类型的通知注解: @Befo…
一.什么是AOP AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充.在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. AOP是spring框架中的一个重要内容.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的…
1.前言 以前学习的时候使用权限的拦截,一般都是对路径进行拦截 ,要么用拦截器设置拦截信息,要么是在配置文件内设置拦截信息, spring security 支持使用注解的形式 ,写在方法和接口上拦截 , 分别支持 三种  : @PreAuthorize("hasRole('ROLE_xxx')" ) @PostAuthorize("returnObject.type == authentication.name") @Secured({ "ROLE_DB…
在做项目的时候,有一个需求是将数据库中的信息封装到实体类返回到jsp界面 传过来的参数只是实体类的id属性,然后根据id属性去查数据库,事情就是这样,然后 结果遇到很奇怪的事情,在jsp页面中使用EL表达式取值,除了id字段,其他都是NULL 先记录结论: 分为两种情况 一:方法参数use的引用值(假设地址:0x0011)在Controller层使用中未发生改变 那么在这个方法中默认有一个req.setAttribute("类名首字母小写",use); 注意:默认意思这边你写不写这个绑…