在做一个Spring Project Demo 开发时,用到了权限验证和系统日志两个功能模块,对于权限验证用了比较主流的shiro 框架,而对于系统日志记录本着学习的目的,就自己动手实现了!

在这两个模块中都用到了注解的方式,通过注解的方式来实现AOP,在项目中使用shiro注解需要在spring配置文件中加入如下代码:

<!-- java中使用shiro注解  --><bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"depends-on="lifecycleBeanPostProcessor" /><bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"><property name="securityManager" ref="securityManager" /></bean>

系统日志记录由于使用了自定义注解,需要通过aop命名空间的<aop:aspectj-autoproxy />声明spring容器中哪些配置@Aspect切面的bean创建代理,代码如下:

    <!-- 自定义注解 --><aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy><!-- class 为你切面类 --><bean class="com.gental.pimf.aspect.SystemLogAspect"></bean>

由于在下对spring的了解还不够深入,在写配置文件时,将shiro的注解配置和自定义注解配置同时放在了spring-mvc.xml(springMvc 的配置文件)中,因此在controller里所用使用了shiro注解的方法均不能被访问,页面请求时总是404错误。对于这种问题暂时我的的解决办法就是讲shiro的注解代理和自定义的注解代理分别放到spring-shiro.xml(shiro的配置文件)和spring-mvc.xml中去。

翻阅了一些CSDN上的文章,原来是属于“spring 二次代理的问题””相关的问题,由于org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator 默认使用了JDK动态代理,

而<aop:aspectj-autoproxy proxy-target-class="true" /> 和<aop:config proxy-target-class="true" />都指定使用CGLIB类代理,
即虽然AspectJAwareAdvisorAutoProxyCreator创建了类代理,但DefaultAdvisorAutoProxyCreator还是创建了JDK动态代理(接口)。
解决办法:
 DefaultAdvisorAutoProxyCreator也是CGLIB类代理,

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">  <property name="proxyTargetClass" value="true"/>
</bean>

这样这两种配置项可同时放置到spring-mvc.xml文件中

spring 使用注解遇到的问题相关推荐

  1. 【Spring】spring基于注解的声明式事务控制

    结构 domin package com.itheima.domain;import java.io.Serializable;public class Account implements Seri ...

  2. Spring系列之Spring常用注解总结

    参看博客:https://www.cnblogs.com/xiaoxi/p/5935009.html 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺 ...

  3. 实践:使用Spring 原生注解来快速实现 策略模式 + 工厂模式

    作者:Richard_Yi juejin.im/post/5db0e910518825648f2ef355 前言 这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来, ...

  4. Spring使用注解配置依赖注入

    大部分情况下,使用Spring配置依赖注入时,都是使用注解来进行配置,因为注解比xml要方便和简单.不过类似于数据源对象这种配置信息容易变更的对象除外,这种对象使用xml文件来进行配置会更适合,方便于 ...

  5. Spring 使用注解方式进行事务管理

    2019独角兽企业重金招聘Python工程师标准>>> 大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅. 事物注 ...

  6. 第五章 Spring进阶-注解方式实现AOP(1)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 徒弟:师傅,我 ...

  7. Spring 缓存注解@Cacheable 在缓存时候 ,出现了第一次进入调用 方法 ,第二次不调用的异常

    Spring 缓存注解@Cacheable 在缓存时候 ,出现了第一次进入调用 方法 ,第二次不调用的异常 参考文章: (1)Spring 缓存注解@Cacheable 在缓存时候 ,出现了第一次进入 ...

  8. Spring 使用注解方式进行事物管理

    Spring 使用注解方式进行事物管理 大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅. 事物注解方式: @Transaction ...

  9. Spring Ioc注解式开发中注解的作用

    Spring Ioc注解式开发中注解的作用 目标:本章节注重于Spring Ioc的注解式开发之中注解的作用. 基于注解的DI实现IOC 1.定义bean而注解 a.@Component @Repos ...

  10. Spring基于注解的AOP配置

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

最新文章

  1. 1016 Phone Bills
  2. AES加密_ js与C#互通
  3. BZOJ 3669 . JZOJ 3754. 【NOI2014】魔法森林
  4. 热部署插件JRebel使用解决方案(安装+踩坑+使用方法)傻瓜式超详细!!!
  5. DeepLink用法及源码解析
  6. mysql 创建账号权限_mysql创建用户,并指定用户的权限(grant命令)
  7. FPGA学习(第8节)-Verilog设计电路的时序要点及时序仿真
  8. 腾讯T4梳理的必备笔记:自动化测试必掌握的30个核心知识点
  9. 第二章 驱动程序调测方法与技巧
  10. 新win10计算机分区,预装win10系统新电脑怎么分区
  11. webpack 编译stylus_webpack4 引入stylus和css, npm run build后.styl文件没有提取出来
  12. 博士阶段能学到什么硕士学不到的东西?
  13. Jmeter - 从入门到精通高级篇 - jmeter使用监视器结果监控tomcat性能(详解教程)
  14. 模态逻辑(1)——从命题逻辑开始
  15. ARM汇编指令立即数规范和判断
  16. C#通过MGet方法快速获取Redis数据库的记录
  17. java quot;转义为双引号
  18. 自监督学习和无监督学习的区别
  19. 电子货架标签-----智能基站V3
  20. 十、Linux文件 - fread函数讲解

热门文章

  1. R语言安装ccgarch_R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测
  2. 解决Win10/Win11输入法卡顿问题
  3. Apache运行模式MPM详解
  4. vmware workstation 16 安装centos7 全记录(文字版)
  5. 数据模型、概念模型、逻辑模型、物理模型
  6. $('xx')[0].files[0]的意思
  7. STM32(7):中断方式让按键点亮LED
  8. MSDP技术原理与实验
  9. multicast msdp 1
  10. 使用ArchR分析单细胞ATAC-seq数据(第一章)