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

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

阅读更多
yyyhbfl
分享到:
评论
33 楼 jelver 2008-11-07  
貌视很口气很大,不知道混得如何,不过没有人多少人否认spring作者的牛X,楼主呢?
32 楼 nihongye 2008-10-15  
大猫汤姆 写道
nihongye 写道

我的理解猫的意思是构建代理对象的过程是线程不安全的。不是说返回的代理对象是线程不安全的。但猫它还没给出证据。。。


还是你细心.我就是这个意思.
不用给证据,看下AOP的源码就知道了.


我已经说得恶心了,从来没说这么多话.总之SPRING的源代码并不怎么样,不是说自己牛,SPRING给我的印像就是如此,IOC和AOP吹水的成份大.拿SPRING来吹水的人只会被鄙视。
很多人就是羊群心里重,听到有什么东西好都拥过去抢,捡了根鸡毛当宝贝,还不让别人说,自己喜欢的东西坚决反对别人指出缺点,这就是一个学霸的作为。
我也要吼一嗓子:“你们都是学霸”(不是的别往自己身上套,哈哈)!



我看了ProxyFactoryBean,newPrototypeInstance方法是做同步的。
除了哪些setXXX,这样的配置代码自己负责同步就是了。
你还是给出证据来的好,最好有测试代码。另外我们只讨论技术问题,不说别的。
31 楼 dennis_zane 2008-10-15  
大猫汤姆 写道
nihongye 写道

我的理解猫的意思是构建代理对象的过程是线程不安全的。不是说返回的代理对象是线程不安全的。但猫它还没给出证据。。。


还是你细心.我就是这个意思.
不用给证据,看下AOP的源码就知道了.


我已经说得恶心了,从来没说这么多话.总之SPRING的源代码并不怎么样,不是说自己牛,SPRING给我的印像就是如此,IOC和AOP吹水的成份大.拿SPRING来吹水的人只会被鄙视。
很多人就是羊群心里重,听到有什么东西好都拥过去抢,捡了根鸡毛当宝贝,还不让别人说,自己喜欢的东西坚决反对别人指出缺点,这就是一个学霸的作为。
我也要吼一嗓子:“你们都是学霸”(不是的别往自己身上套,哈哈)!



哈哈,原来是逆反心理。不过说真的,我还真没在某个项目中实践过spring,俺不是学霸:)
30 楼 daquan198163 2008-10-15  
大猫汤姆 写道
嗯,我是想提醒大家用的时候注意pototype

你是说Spring每次创建pototype的bean时有这个线程安全问题,是吧?
根据我的经验,绝大多数bean应该配置成singleton,
把一个AOP增强的bean配成pototype,而且还每次去容器getBean,这种做法本身就很奇怪
29 楼 大猫汤姆 2008-10-15  
nihongye 写道

我的理解猫的意思是构建代理对象的过程是线程不安全的。不是说返回的代理对象是线程不安全的。但猫它还没给出证据。。。


还是你细心.我就是这个意思.
不用给证据,看下AOP的源码就知道了.


我已经说得恶心了,从来没说这么多话.总之SPRING的源代码并不怎么样,不是说自己牛,SPRING给我的印像就是如此,IOC和AOP吹水的成份大.拿SPRING来吹水的人只会被鄙视。
很多人就是羊群心里重,听到有什么东西好都拥过去抢,捡了根鸡毛当宝贝,还不让别人说,自己喜欢的东西坚决反对别人指出缺点,这就是一个学霸的作为。
我也要吼一嗓子:“你们都是学霸”(不是的别往自己身上套,哈哈)!


28 楼 nihongye 2008-10-14  
dennis_zane 写道
大猫汤姆 写道
dennis_zane 写道
这是个伪命题。
线程安全性从来不是框架所能保证,并发编程的难点就是模块性的缺失,两个模块分开都是线程安全的,但是组合在一起你却不能说他一定是线程安全的。
因此指望spring帮你去解决代理对象的线程安全问题是不现实的,并发安全的保证只能来自于你的业务代码本身。


框架本身不是线程安全的你敢用吗?
我这里说的就是框架本身不是线程安全,而不是程序员写程序造成的不安全。并不是要框架解决不安全的线程。


嗯,我看明白了,比较迟钝:)
你所说的spring AOP返回的代理对象不是线程安全的。从spring实现来说这个选择是可以理解的,如你所说,要么同步要么new,整体带来的代价太高了。而对于目前的大部分基于数据库的crud的应用来说,DAO、service几乎都是无状态的,spring aop带来的好处显而易见。

我的理解猫的意思是构建代理对象的过程是线程不安全的。不是说返回的代理对象是线程不安全的。但猫它还没给出证据。。。
27 楼 agapple 2008-10-14  
阿里巴巴每天几亿PV,都是用的spring,你敢说它不适合大项目?!
26 楼 dennis_zane 2008-10-14  
大猫汤姆 写道
dennis_zane 写道
这是个伪命题。
线程安全性从来不是框架所能保证,并发编程的难点就是模块性的缺失,两个模块分开都是线程安全的,但是组合在一起你却不能说他一定是线程安全的。
因此指望spring帮你去解决代理对象的线程安全问题是不现实的,并发安全的保证只能来自于你的业务代码本身。


框架本身不是线程安全的你敢用吗?
我这里说的就是框架本身不是线程安全,而不是程序员写程序造成的不安全。并不是要框架解决不安全的线程。


嗯,我看明白了,比较迟钝:)
你所说的spring AOP返回的代理对象不是线程安全的。从spring实现来说这个选择是可以理解的,如你所说,要么同步要么new,整体带来的代价太高了。而对于目前的大部分基于数据库的crud的应用来说,DAO、service几乎都是无状态的,spring aop带来的好处显而易见。
25 楼 大猫汤姆 2008-10-14  
axeon 写道
支持tom猫,我也是来砸spring的。

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

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

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

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


很有主见的说法,虽然很多人不认同。
事实上大公司还只是使用JSP+SERVLET,框架全部靠边站。
24 楼 大猫汤姆 2008-10-14  
dennis_zane 写道
这是个伪命题。
线程安全性从来不是框架所能保证,并发编程的难点就是模块性的缺失,两个模块分开都是线程安全的,但是组合在一起你却不能说他一定是线程安全的。
因此指望spring帮你去解决代理对象的线程安全问题是不现实的,并发安全的保证只能来自于你的业务代码本身。


框架本身不是线程安全的你敢用吗?
我这里说的就是框架本身不是线程安全,而不是程序员写程序造成的不安全。并不是要框架解决不安全的线程。
23 楼 dennis_zane 2008-10-14  
nihongye 写道
dennis_zane 写道
这是个伪命题。
线程安全性从来不是框架所能保证,并发编程的难点就是模块性的缺失,两个模块分开都是线程安全的,但是组合在一起你却不能说他一定是线程安全的。
因此指望spring帮你去解决代理对象的线程安全问题是不现实的,并发安全的保证只能来自于你的业务代码本身。

严重鄙视这些不仔细看问题的人,哈哈,猫是想说框架不是线程安全的,并发的构建代理对象,存在bug(而他说这个bug是不可修改的)

我以为我理解了,照你这么说,我又理解错了?还是举例为妙
22 楼 nihongye 2008-10-14  
dennis_zane 写道
这是个伪命题。
线程安全性从来不是框架所能保证,并发编程的难点就是模块性的缺失,两个模块分开都是线程安全的,但是组合在一起你却不能说他一定是线程安全的。
因此指望spring帮你去解决代理对象的线程安全问题是不现实的,并发安全的保证只能来自于你的业务代码本身。

严重鄙视这些不仔细看问题的人,哈哈,猫是想说框架不是线程安全的,并发的构建代理对象,存在bug(而他说这个bug是不可修改的)
21 楼 dennis_zane 2008-10-14  
这是个伪命题。
线程安全性从来不是框架所能保证,并发编程的难点就是模块性的缺失,两个模块分开都是线程安全的,但是组合在一起你却不能说他一定是线程安全的。
因此指望spring帮你去解决代理对象的线程安全问题是不现实的,并发安全的保证只能来自于你的业务代码本身。
20 楼 ahuaxuan 2008-10-14  
真是伪命题中的伪命题,下面我举一些例子吧,内部原理就不说了(估计一两篇文章还说不完),

spring中代理对象本来就不带有线程可以随便修改的属性,也就是可以看成是无状态的,这也是spring的一个哲学,当然spring也提倡我们使用着也遵循这种原则,所以我们的service dao基本都是无状态的.

一个无状态的对象,任何线程都可以无限制的使用,哪里会产生什么效率问题呢,即使是有状态的对象,使用对象池或者每次都new一个,在一般的项目中也不会有问题啊,比如struts2.0,使用struts2.0的公司多了,每天几百w的访问量的也多的去了,怎么没见说有问题啊,我们就是使用struts2.0,活得很滋润

不要把不会用说成是框架不好.
我们这个pv 1亿多得网站新的web项目都是使用struts2.0,怎么没见有问题呢.

-------------------------------------------
我从来没有见过有项目是因为使用spring导致项目失败的,不知道能否有人拿出来让大家开开眼界


-------------------------------------------ps
大多数spring的项目都是web项目,都运行在web容器中,比如说tomcat,这不就是多线程的吗,每次请求都会从tomcat中的线程池拿一个线程出来处理这个请求,所以我们的spring基本上都运行在多线程的环境中
19 楼 pubx 2008-10-14  
大猫汤姆 写道
嗯,我是想提醒大家用的时候注意pototype

这个好像不好弄。
18 楼 nihongye 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,这个是改变不了的。源代码只能那么实现了。

你没仔细看,说的是2.5有问题,2.0没问题。aop那块就不清楚了,你清楚的话,开贴另外讨论!?。
17 楼 大猫汤姆 2008-10-14  
嗯,我是想提醒大家用的时候注意pototype
16 楼 phoenixup 2008-10-14  
axeon 写道
支持tom猫,我也是来砸spring的。
我所理解的spring是相当低效率和无价值的,在我所经历和见到的spring项目中成功的少,垃圾的多。

相反,我见到的Spring成功项目很多~~但是垃圾的项目一向比不垃圾的项目多,这个跟Spring没什么关系。还有Spring低效率和无价值,可以理解为语不惊人死不休吗~~

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


只能说你不太适合使用Spring。

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


效率可以用数据说话吗,Spring2.5的运行效率相当快速,不知道你所要求的效率指标是多少。

引用

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


Spring都拿来技术吹水,那也真是没什么可以吹的了。。。
15 楼 phoenixup 2008-10-14  
首先的问题~~AOP是面向切面编程,而线程安全的问题是应该由切面本身去考虑的~~你不能因为某人用枪杀了人,就否定枪的作用。没有任何编程结构可以包办所有事情。
14 楼 QuakeWang 2008-10-14  
举个实际的代码例子来说明你遇到的问题吧,我认为AOP的线程安全是个伪命题

相关推荐

    小马哥讲 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