`
xtuhcy
  • 浏览: 143074 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

奇怪的Spring AspectJ 代理的目标bean会初始化2次的问题

阅读更多

使用aspectj的注释方式实现aop

配置:

<context:component-scan base-package="com.aspire.nmp" />

<aop:aspectj-autoproxy proxy-target-class="true"/>

 

代码:

@Pointcut("bean(testServiceImpl)")
 public void testService() {
  
 }

 

@Around("testService()")
 public Object test(ProceedingJoinPoint point) throws Throwable {
  System.out.println("testService()");
  return point.proceed();
 }

 

spring的bean应该是单例的,但是发现testServiceImpl的构造函数被调用2次,不知是何原理。

 

将<aop:aspectj-autoproxy proxy-target-class="true"/>替换为<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

就不会有这个问题

 

 

目前还在看源代码,哪位大侠能帮忙解一下?

 

6
12
分享到:
评论
7 楼 xtuhcy 2012-10-25  
没有集成 Shiro
6 楼 jinnianshilongnian 2012-08-29  
xtuhcy 写道
jinnianshilongnian :
我开始也怀疑是集成springmvc的原因。但是用的是全局的context,没有用springmvc私有的context。
web.xml配置部分如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/config/applicationContext-*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


你集成如 Shiro了吗?
5 楼 xtuhcy 2012-08-29  
jinnianshilongnian :
我开始也怀疑是集成springmvc的原因。但是用的是全局的context,没有用springmvc私有的context。
web.xml配置部分如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/config/applicationContext-*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
4 楼 jinnianshilongnian 2012-08-24  
xtuhcy 写道
确实只有一处配置,目前还没有找到原因


1、和spingmvc集成了吗
2、和shiro集成了吗

3、能否把具体相关配置文件发上来
3 楼 xtuhcy 2012-08-24  
确实只有一处配置,目前还没有找到原因
2 楼 ghyghost 2012-08-16  
求楼主回复
1 楼 jinnianshilongnian 2012-08-16  
怀疑你有两处配置文件,都有<context:component-scan base-package="com.aspire.nmp" /> 因此加载了两次

跟我这篇场景一样
http://jinnianshilongnian.iteye.com/blog/1423971

相关推荐

    spring的bean加载顺序样例项目

    在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...

    Spring源码深度解析第二版

    Bean的生命周期包括了Bean的创建、初始化和销毁等过程。依赖注入是指容器将Bean的依赖项注入到Bean中。AOP是指容器提供的面向切面编程功能。 2.3 工程搭建 为了使用Spring框架的容器,我们需要搭建工程环境。工程...

    JavaSpring的依赖包(包含切面AspectJ)

    Spring还提供了容器(ApplicationContext)来管理和初始化这些对象。 其次,AspectJ 是一个强大的面向切面编程(AOP)框架,它允许我们在不修改已有代码的情况下,插入新的行为或增强现有功能。在Spring中结合使用...

    spring相关面试问题.docx

    5. **初始化回调**:Spring 会调用 Bean 的初始化方法,如 init-method 指定的方法。 6. **正常服务**:Bean 准备就绪后,开始提供服务。 7. **销毁回调**:当容器关闭时,Spring 会调用 Bean 的销毁方法,如 ...

    Spring Aop 源码流程.doc

    总的来说,Spring AOP的源码流程涵盖了从初始化容器到Bean定义的加载和处理,再到动态代理的创建。这个过程确保了切面可以在适当的时间被应用到目标Bean上,实现代码的解耦和模块化。理解这一流程对于深入掌握Spring...

    Spring 内置 BeanPostProcessor类图.zip

    `postProcessAfterInitialization()`方法则在bean初始化完成后调用。在这个阶段,bean已经完成了所有默认的初始化操作,你可以在此时进行进一步的定制,例如为bean添加AOP代理。 Spring框架中内置的一些...

    Spring 参考手册 Spring速查手册 spring初学者使用

    Spring管理的Bean有三种状态:未初始化、初始化中、初始化完成。通过工厂方法、初始化回调、销毁回调等机制,开发者可以自定义Bean的生命周期。 五、Spring MVC Spring MVC是Spring框架的一部分,用于构建Web应用...

    aspectj.pdf

    - 静态和动态初始化(Static and Dynamic Initialization) #### 2. Pointcuts(切入点) 切入点是一组连接点的集合,用于指定哪些连接点上应用切面逻辑。切入点设计者允许使用逻辑运算符(&&, ||, !)来组合多个...

    Spring in Action(第二版 中文高清版).part2

    2.5.3 初始化和销毁Bean 2.6 小结 第3章 高级Bean装配 3.1 声明父Bean和子Bean 3.1.1 抽象基Bean类型 3.1.2 抽象共同属性 3.2 方法注入 3.2.1 基本的方法替换 3.2.2 获取器注入 3.3 注入非Spring Bean ...

    Spring learning

    在Spring中,我们通过配置文件或者Java配置类来定义Bean,Spring容器负责管理这些Bean的生命周期,包括创建、依赖注入、初始化、使用和销毁。Bean可以通过@Autowired注解自动装配依赖,也可以通过@Qualifier来精确...

    使用DefaultAdvisorAutoProxyCreator实现spring的自动代理

    前者在bean实例化之前调用,后者在bean初始化之后调用。这两个方法检查当前bean是否匹配任何顾问的切入点,如果匹配,则创建代理。 在实际使用中,通常有两种方式配置`DefaultAdvisorAutoProxyCreator`: 1. XML...

    Spring攻略(第二版 中文高清版).part1

    2.7 自定义Bean初始化和析构 72 2.7.1 问题 72 2.7.2 解决方案 72 2.7.3 工作原理 72 2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 ...

    Spring攻略(第二版 中文高清版).part2

    2.7 自定义Bean初始化和析构 72 2.7.1 问题 72 2.7.2 解决方案 72 2.7.3 工作原理 72 2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 ...

    Spring依赖包

    Spring容器负责创建Bean、初始化Bean、装配Bean以及管理Bean的整个生命周期。 4. **AOP(Aspect-Oriented Programming,面向切面编程)**:Spring支持AOP,允许开发者定义“切面”,这些切面可以包含业务逻辑以及...

    Spring源码

    Bean装配涉及Bean的生命周期管理,包括初始化、销毁方法以及属性的设置。 "04-di-annotation"则关注于依赖注入(DI)的注解方式。Spring通过DI来管理对象间的依赖关系,使得代码更加松耦合。注解如@Autowired、@...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.6.1. 设置Bean使自动装配失效 3.3.7. 依赖检查 3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. ...

    spring杂谈 作者zhang KaiTao

    BeanPostProcessor接口是Spring中实现开闭原则的一个重要工具,允许开发者在Spring容器初始化Bean前后进行自定义操作,增强了框架的可扩展性。作者探讨了如何利用BeanPostProcessor实现特定的业务逻辑,以及在两个...

    简单Spring框架模拟器--Demo

    接着,“tiny-spring-step-2-abstract-beanfactory-and-do-bean-initilizing-in-it.zip”进一步深入,介绍了AbstractBeanFactory和Bean的初始化过程。在这个阶段,你将学习到BeanFactory如何解析XML配置,创建Bean...

    Spring中文帮助文档

    3.3.4. 延迟初始化bean 3.3.5. 自动装配(autowire)协作者 3.3.6. 依赖检查 3.3.7. 方法注入 3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton beans和prototype-bean的...

Global site tag (gtag.js) - Google Analytics