`
大猫汤姆
  • 浏览: 35765 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

SPRING的AOP不适合多线程应用?

阅读更多
yyyhbfl
分享到:
评论
13 楼 大猫汤姆 2008-10-14  
nihongye 写道


我直接就google了,找到一篇分析[url]http://blog.pramatiservices.com/spring-bean-creation-is-not-thread-safe

文中讨论了在并发环境下,得到未完全初始化的单例bean的bug。


上面说Spring2.0是有BUG的,但2.5已经修复了IOC的BUG。

不仅仅如此2.5的AOP也是非线程安全的。这不是BUG,这个是改变不了的。源代码只能那么实现了。
12 楼 axeon 2008-10-14  
再砸一下struts

如果说在所谓的企业应用中,这玩意有一席之地,在互联网应用中,完全是个垃圾。

1.效率问题。随便出个错,你可以发现struts相关的堆栈输出至少20条,这玩意还有效率可言么?

2.我为什么要统一配置页面转发和定向?直接在页面中定向页面转发和配置不是更有灵活性。在大系统中,约定规则不是更方便?

顺便砸taglib,除了降低系统效率之外,没有看出来其他用处。从某种程度上来说,采用mvc的思想,直接在页面中用java代码输出会易于编写和维护。
11 楼 axeon 2008-10-14  
支持tom猫,我也是来砸spring的。

我所理解的spring是相当低效率和无价值的,在我所经历和见到的spring项目中成功的少,垃圾的多。

一方面spring所倡导的概念仅仅是概念,缺乏实用性。小项目中太复杂,大项目用不上。使用spring之后,项目或产品的系统运维很麻烦,带来的好处倒是没觉得。

程序运行效率很重要,不可能因为机器便宜就可以盲目增加机器,一方面电力成本的问题,另一方面运维难度。

spring绝佳之处就在于概念,作为技术吹水的材料,spring是很适合的。
10 楼 nihongye 2008-10-14  

引用
这个是讨论的重点.
不是被代理对像,也不考虑程序员造成的安全问题.AOP框架本身不是线程序安全的.

我直接就google了,找到一篇分析http://blog.pramatiservices.com/spring-bean-creation-is-not-thread-safe/
文中讨论了在并发环境下,得到未完全初始化的单例bean的bug。

引用
性能问题,我估计你用的不是普通对相,如果是普通对像会应该差距这么小,普通对像应该是ArrayList的那种,String,无状态简单BEAN。这样的话性能相差至少是50倍吧。一会测下就行了。
仅仅创建的性能差距还不是全部,还有运行时执行aop框架对象的消耗时间,这个时间都要累加到CPU上面,所以各种因素加在一起影响就大了。

确实,代码里有一行new Date()导致,50倍基本一致。cglib的方式不知道性能怎样(我看一些例子的代码是可以先构建出proxy class,然后才创建实例)。这个累积效应,关键是不好量化。

9 楼 大猫汤姆 2008-10-14  
nihongye 写道
引用
1.我说的就是AOP的实现对象不是线程安全的.所以AOP单例本身就不是安全的,其中的接口数组,拦截器,被代理对像的引用等等,当多线程并发时会有意想不到的错误.

你是说被代理对象还是aop框架本身的问题?

这个是讨论的重点.
不是被代理对像,也不考虑程序员造成的安全问题.AOP框架本身不是线程序安全的.


性能问题,我估计你用的不是普通对相,如果是普通对像会应该差距这么小,普通对像应该是ArrayList的那种,String,无状态简单BEAN。这样的话性能相差至少是50倍吧。一会测下就行了。
仅仅创建的性能差距还不是全部,还有运行时执行aop框架对象的消耗时间,这个时间都要累加到CPU上面,所以各种因素加在一起影响就大了。

8 楼 lqql 2008-10-14  
MarkDong 写道
不能简单的认为单例就是线程不安全的,所有的无状态bean都是线程安全的

也不能认为无状态的bean就是线程安全的,如果方法里在读取和更改其他类里的公共变量就会有线程问题!
7 楼 nihongye 2008-10-14  
引用
1.我说的就是AOP的实现对象不是线程安全的.所以AOP单例本身就不是安全的,其中的接口数组,拦截器,被代理对像的引用等等,当多线程并发时会有意想不到的错误.

你是说被代理对象还是aop框架本身的问题?

引用
2.绝对不是三倍,远远大于三倍。机器便宜,但不能因为机器便宜就可以滥用资源。

收回我的结论,我的测试做了new Date()

引用
3.是否可测试与IOC没有关系.不用IOC也可以很方便的测试。

IOC只是一种思想,而spring是帮助实现这种思想的工具,如果对象足够复杂,有好工具总比没有好。




6 楼 大猫汤姆 2008-10-14  
nihongye 写道
第一:线程安全与否取决于是否存在线程同时修改某一东西(和aop没有关系)。
第二:代理对象的创建开销大概是3倍于普通对象(第一个比较长)
第三:ioc是架构上的选择,如果希望代码是可测试的,那么应该选它。


1.我说的就是AOP的实现对象不是线程安全的.所以AOP单例本身就不是安全的,其中的接口数组,拦截器,被代理对像的引用等等,当多线程并发时会有意想不到的错误.
2.绝对不是三倍,远远大于三倍。机器便宜,但不能因为机器便宜就可以滥用资源。
3.是否可测试与IOC没有关系.不用IOC也可以很方便的测试。

总的意思是,做项目选择合适的,SPRNG就像狗皮膏药一样到处贴,哪里都能用,到哪都能看到项目里面使用了SPRING,这样往往事倍功半.这样讲又回到了老问题,又有人会说到底应该学什么框架啊,其实我也说不好,各有所长,事事无绝对。

5 楼 MarkDong 2008-10-13  
不能简单的认为单例就是线程不安全的,所有的无状态bean都是线程安全的
4 楼 lqql 2008-10-13  
单例的话,可能肯定是线程不安全的吧!
3 楼 nihongye 2008-10-13  
第一:线程安全与否取决于是否存在线程同时修改某一东西(和aop没有关系)。
第二:代理对象的创建开销大概是3倍于普通对象(第一个比较长)
第三:ioc是架构上的选择,如果希望代码是可测试的,那么应该选它。
2 楼 大猫汤姆 2008-10-13  
tristan.cw 写道
每次都new不一定就是性能下降,你看struts2


不知道你说的依据是什么.
这其中的性能不会下降是凭感觉得来的吧.

1 楼 tristan.cw 2008-10-12  
每次都new不一定就是性能下降,你看struts2

相关推荐

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    描述中,“小马哥讲 Spring AOP 编程思想”表明这是由一位专家小马哥讲解的内容,虽然没有提供更多关于小马哥的信息,但可以合理推断他应该是一位经验丰富的开发者或者技术讲师。 在内容部分列出的诸多术语中,可以...

    初探spring aop内部实现 java

    Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,对程序的行为进行统一的管理和控制。本篇文章将深入探讨Spring AOP的内部实现,以及如何通过源代码理解其DataSource...

    Spring AOP应用

    **Spring AOP 应用详解** Spring AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在程序运行时动态插入代码的能力,以实现跨切面的关注点,如日志、事务管理、权限控制...

    spring-aop.rar_java aop_spring aop

    3. 多线程:理解线程的概念,学会使用Thread和Runnable接口实现并发。 4. 输入/输出流:文件读写,网络通信等操作。 5. 异常处理:理解和使用try-catch-finally语句块,进行异常的捕获和处理。 6. IO流过滤器:如...

    springAop多数据源

    首先,"SpringAop多数据源"指的是在同一个应用程序中同时处理多个不同的数据库源。这种设计模式在分布式系统或有多个业务模块需要独立连接不同数据库的情况下非常常见。在Spring框架中,我们可以利用DataSource接口...

    Spring AOP源码笔记

    - **线程安全问题**: Spring事务管理在多线程环境下的行为和注意事项。 - **Bean的生命周期和作用域**: 影响事务管理的关键因素,如单例Bean的线程安全性问题。 **7. Spring IOC回顾** - **控制反转(IoC)**: 将...

    springboot基于AOP将web请求写入日志

    在Spring Boot中,AOP(面向切面编程)是一种强大的工具,可以让我们在不修改业务代码的情况下,实现如日志记录、性能监控等横切关注点。本教程将引导新手理解如何利用AOP来记录Web请求日志。下面将详细阐述这个过程...

    Java框架技术 Spring 学习案例 Spring AOP案例和Spring事务处理案例

    在Java开发领域,Spring框架是不可或缺的重要组成部分,它极大地简化了企业级应用的开发工作。本教程主要聚焦于Spring框架的两大核心特性:Spring AOP(面向切面编程)和Spring事务处理,通过具体的应用案例来深入...

    spring 多线程队列执行

    在Spring框架中,多线程队列执行是一个重要的性能优化策略,它可以帮助应用程序更高效地处理并发任务,尤其是在高负载和大数据量的场景下。本文将深入探讨Spring如何实现多线程队列以及其相关的核心概念和技术。 1....

    java中spring里实现多线程

    此外,Spring的`@Scope`注解可以帮助管理单例bean在多线程环境下的状态,避免数据不一致。 总之,Spring通过提供高级的线程管理和调度工具,简化了在Java应用程序中实现多线程的复杂性。理解并熟练使用这些工具,能...

    Spring aop术语详解

    Spring AOP 术语详解 Spring 中的 AOP 术语可能会使人感到困惑,但本文将对 AOP 术语进行通俗的解释。 关注点(Concern) 关注点是我们要考察或解决的问题。如订单的处理、用户的验证、用户日志记录等都属于关注...

    maven管理的Spring多线程任务demo

    Spring框架则是Java企业级应用开发的核心框架,它提供了丰富的功能,包括但不限于依赖注入、AOP(面向切面编程)、事务管理以及各种模块如Spring MVC、Spring Data等。而多线程则是现代计算机编程中的重要概念,它...

    拿捏面试官-Spring AOP IOC源码笔记

    - **Spring事务的线程安全问题**:理解在多线程环境下事务管理的挑战及解决方案。 10. **面试题回顾** - 包括Spring的基本概念、优点、模块、Bean的生命周期、自动装配方式、IoC和AOP的应用等。 这些内容涵盖了...

    java 后端学习资料包含(spring,多线程).zip

    同时,Spring AOP也可以在多线程上下文中发挥作用,例如,我们可以在切面中实现线程安全的缓存或者记录每个线程的执行日志。此外,Spring框架还提供了`@Transactional`注解,用于声明式事务管理,这在多线程环境中尤...

    第三章:Spring AOP API 设计与实现1

    Spring AOP API 设计与实现是Spring框架的重要组成部分,它提供了面向切面编程的能力,使得开发者可以在不修改源代码的情况下,对程序进行横切关注点的处理,如日志记录、事务管理等。本章主要涵盖了Spring AOP的多...

    Springaop原理及各种应用场景

    Spring AOP的应用场景广泛,包括但不限于: 1. Authentication:权限控制,确保只有经过认证的用户才能访问特定资源。 2. Caching:缓存,提高数据访问速度,减少数据库交互。 3. Context passing:内容传递,如在...

    spring-boot-multithreading.zip_spring boot_多线程

    在Spring Boot应用中,多线程的使用是一个关键特性,特别是在处理高并发或者需要执行耗时操作时。本文将深入探讨Spring Boot如何实现多线程,并结合提供的`spring-boot-multithreading.zip`压缩包中的示例进行讲解。...

    无处不在的Spring AOP事务及踩过的坑

    6. **事务同步**:在多线程环境中,如果多个线程同时访问同一个事务性方法,可能会导致事务同步问题。Spring提供了事务同步机制,但需要正确配置和使用。 7. **数据库限制**:虽然Spring提供了强大的事务管理功能,...

    线程池中使用spring aop事务增强

    这是因为在多线程环境下,`job`方法的调用并没有通过Spring的AOP代理,而是直接由普通实例执行,导致事务管理失效。 Spring AOP通常通过动态代理(JDK动态代理或CGLIB)来实现,当方法通过代理调用时,会触发AOP...

Global site tag (gtag.js) - Google Analytics