`
大猫汤姆
  • 浏览: 34967 次
  • 性别: 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的线程安全是个伪命题

相关推荐

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

    灰常简单,适合新手,一看就懂,本来就是新手写的

    Spring小例子项目源码

    项目源码,内有Spring AOP、事务、线程小例子,还有AOP实现原理,动态代理,java多线程

    Spring.3.x企业应用开发实战(完整版).part2

    10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼...

    20万字必备java面试八股文宝典-多线程.数据库.Spring.SpringBoot.Linux.分布式.设计模式.面试指导

    这份宝典囊括了Java编程中的基础知识、多线程编程、数据库操作、Spring框架、Spring Boot、Spring Cloud、Linux操作系统、分布式系统、设计模式、面试指导以及自我介绍等内容。 基础部分,包括Java编程语言的核心...

    Spring Boot中使用AOP统一处理web层异常的方法

    主要介绍了Spring Boot中使用AOP统一处理web层异常的相关资料,需要的朋友可以参考下

    Spring3.x企业应用开发实战(完整版) part1

    10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼...

    spring.net中文手册在线版

    多线程和并发操作 7.1.简介 7.2.线程本地存储 7.3.同步基础 7.3.1.ISync 7.3.2.SyncHolder 7.3.3.Latch 7.3.4.Semaphore 第八章. 对象池 8.1.简介 8.2.接口和实现 第九章. Spring.NET杂记 9.1.简介 9.2....

    面试题问题合集.docx

    17. 多进程与多线程编程的区别?多线程的实际运行环境?怎么运用? 21.redis数据怎么缓存的值是什么形式?介绍redis缓存?redis的常用指令?redis分布式锁介绍和运用?redis集群如果一个宕机怎么办?秒杀的具体实现...

    Java常见面试题208道.docx

    面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...

    IT|Java|面试|宝典

    多线程并发 4.java基础 5.spring原理 6.微服务 7.netty与rpc 及实现 8.网络 9.zookeeper 10.kafka 11.rabbitmq 12.hbase 13.mongodb 14.cassandra 15.设计模式 16.负载均衡 17.数据库 18.一致性算法 19.java算法 20....

    java面试题

    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...

    史上最全java面试,103项重点知识,带目录

    三、多线程 13 35. 并行和并发有什么区别? 13 36. 线程和进程的区别? 14 37. 守护线程是什么? 14 38. 创建线程有哪几种方式? 14 39. 说一下 runnable 和 callable 有什么区别? 15 40. 线程有哪些状态? 15 41. ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】多线程的实现方式Thread、Runnable、Callable 72 【多线程】实现Runnable接口与继承Thread类比较 73 【多线程】线程状态转换 74 【多线程】线程的调度 75 线程优先级 75 sleep 76 wait 76 yield 77 join ...

    运用Spring框架实现简单调度

    当前很多开源项目也提供了比较全面的调度功能,如quartz、jcrontab、JobServer等,在这里我介绍一种比较简单的调度,没有quartz那么复杂,目的在于实用就行,这种调度就是spring提供的调度功能,该调度功能基于...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    3.2 多线程 51 3.2.1 点睛 51 3.2.2 示例 51 3.3 计划任务 54 3.3.1 点睛 54 3.3.2 示例 54 3.4 条件注解@Conditional 56 3.4.1 点睛 56 3.4.2 示例 57 3.5 组合注解与元注解 60 3.5.1 点睛 60 3.5.2 示例 60 3.6 @...

    springboot学习思维笔记.xmind

    多线程 计划任务 cron fixDelay fixRate 条件注解@Conditional 组合注解与元注解 @Enable*注解的工作原理 直接导入配置类 依据条件选择配置类 动态注册Bean 测试 Spring ...

    structs+spring+servlet+Thread

    介绍了structs+spring+servlet+Thread的实现,其中介绍了listener、filter、servlet、Interceptor、aop技术、web多线程多种实现方式,下载即可运行

    Hands-On-High-Performance-with-Spring-5:Packt发布的Spring 5的动手高性能

    掌握Bean Wiring的最佳编程实践和性能改进分析各种AOP实施的性能探索与Spring的数据库交互以优化设计和配置解决Hibernate性能问题和陷阱利用多线程和并发编程来提高应用程序性能如果您觉得这本书适合您,请立即获取...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    3.2 多线程 51 3.2.1 点睛 51 3.2.2 示例 51 3.3 计划任务 54 3.3.1 点睛 54 3.3.2 示例 54 3.4 条件注解@Conditional 56 3.4.1 点睛 56 3.4.2 示例 57 3.5 组合注解与元注解 60 3.5.1 点睛 60 3.5.2 示例 60 3.6 @...

Global site tag (gtag.js) - Google Analytics