`

spring=画蛇添足

 
阅读更多
决定把在javaeye上最后一点积分用光,大家投隐藏吧,投新手吧,不过我还是要说,盲从--中国程序员的悲哀。

尝试是好事,盲从就不好了。

现在我开始尝试使用一种简单的方式来构建对象,获取对象。可称之为ContextHolder模式。

/**
 * 2007-6-5 下午02:27:03
 */

/**
 * @author <a href="mailto:guileen@gmail.cn">桂健雄</a>
 * @since 2007-6-5
 */
public abstract class ContextHolder {
	static{
		//init the context ,sessionFactory
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		Properties prop = new Properties();
		InputStream is = null;
		try{
			is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");
			prop.load(is);
		} catch (IOException e) {
			Logger.getLogger(Properties.class).error("jdbc.properties 读取失败");
		}finally{
			if(is != null){
				try {
					is.close();
				} catch (IOException e) {
				}
			}
		}
		cfg.addProperties(prop);
		initAnnotatedClasses(cfg);
		buildDaos();
		sessionFactory = cfg.buildSessionFactory();
		SessionHolder.setSessionFactory(getSessionFactory());
	}
	private static SessionFactory sessionFactory;
	private static MyDao1 dao1;
	private static MyDao2 dao2;
	/**
	 * @param cfg
	 */
	private static void initAnnotatedClasses(AnnotationConfiguration cfg) {
		cfg.addAnnotatedClass(MyEntity1.class);
		cfg.addAnnotatedClass(MyEntity2.class);
		cfg.addAnnotatedClass(MyEntity3.class);
	}
	
	private static void buildDaos(){
		dao1 = new MyDao1Impl();
		dao2 = new MyDao2Impl();
	}
	
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
	
	public static MyDao1 getMyDao1(){
		return dao1;
	}
}


IOC的目标是,建立统一的对象装配器,对象提取器。但是,使用xml的配置实在是没有必要,取对象出来还要用getBean方法,要填对象名,要作类型转换,对了,还要先设法获取ApplicationContext对象。真是无聊之极。

当然,想要使用Spring中的Bean,也不一定非要获取ApplicationContext,可以把调用者也配置到Context中,定义好set方法,在配置文件中,把调用者的property ref 到 想用到bean上。

不过,如此一来,就更加是画蛇添足了。

aop和事务管理,何必一定完全交给IoC框架呢,自己编码啊。使用框架,以为自己发现了捷径,走过去,就发现,这条小路走的不那么爽,布满荆棘。

而使用这种ContextHolder模式,一切是多么的简单明了,直接static的方法调用,ContextHolder.getMyDao1(),就ok了,而且少了一个2M的spring.jar,看着舒服,少了xml,看着舒服,少了一些无聊的getters and setters,舒服。
分享到:
评论
42 楼 dennis_zane 2007-06-08  
jasongreen 写道
部分支持我观点的回帖被删除了,我想说,javaeye这些个老人家,实在太霸道了。

没人删,投票的。
41 楼 jasongreen 2007-06-08  
部分支持我观点的回帖被删除了,我想说,javaeye这些个老人家,实在太霸道了。
40 楼 我想我是海 2007-06-08  
比办公室的空调要冷。。
39 楼 zhangzhaofeng 2007-06-08  
做一做传说中的凳子...
38 楼 dennis_zane 2007-06-07  
catlinux 写道
支持楼主。
J2EE 确认很讨厌, 框架和小零件繁多,还要写装配文件。
前景堪忧。 可喜的是 Python 和Ruby 在Web开发上越来越成熟。
等到,EJB 被取代。 java 就快成了第二个 cobol 了。 当然,移动开发上Java还是前途无量

没看清楚在说什么就开口闭口java将成第二个cobol,拜托你看清楚作者在说什么了吗?
37 楼 catlinux 2007-06-07  
支持楼主。
J2EE 确认很讨厌, 框架和小零件繁多,还要写装配文件。
前景堪忧。 可喜的是 Python 和Ruby 在Web开发上越来越成熟。
等到,EJB 被取代。 java 就快成了第二个 cobol 了。 当然,移动开发上Java还是前途无量
36 楼 bilo 2007-06-07  
一早来就看到这样一个笑话...开心...
35 楼 yfmine 2007-06-06  
jasongreen 写道

我顿悟,控制力与框架是矛盾的。你是否也曾感觉到,有时汽车的失败,不是因为我们思路不清晰,不是因为我们不了解我们想要什么样的汽车。而仅仅因为,我们无法控制这只轮子。

走路是最好控制的方式,连轮子都可以不要……
34 楼 jasongreen 2007-06-06  
连我的偶像都回帖了。
。。。
从事java的一年来,我们学习使用各种各样的轮子,已经超过了发明轮子,理解轮子的时间。我们不知道轮子为什么莫名奇妙的爆掉,我们不得不一遍又一遍的看轮子说明书。
。。。
一次关于jasperreport,你说如果觉得控制力不够,可以自己实现,或者修改jasper的源码。
。。。
我顿悟,控制力与框架是矛盾的。你是否也曾感觉到,有时汽车的失败,不是因为我们思路不清晰,不是因为我们不了解我们想要什么样的汽车。而仅仅因为,我们无法控制这只轮子。
33 楼 agile_boy 2007-06-06  
dovecat 写道
说实话,一位具有精湛技艺的Coder,确实Spring的价值对他来说也不过就是一个用起来稍微称手点的工具而已,必要的时候,他完全可以依据自己的需要抛开spring.
框架这东西,用多了就那么回事.看得太重也不好,重要的是框架背后的设计思想和风格.

有点异议 ,我觉得技艺高的coder,一般不应该重复发明轮子,不过他对框架的使用和理解必然不会和一般人一样,当然了也因人而异
32 楼 passlove 2007-06-06  
感觉spring挺好用的啊
31 楼 agile_boy 2007-06-06  
确实是看不懂了,感觉好像只是在博取大家的眼球。中国的开源现状,也不是仅仅spring,也不仅仅是盲从这么简单。
无语中。。。
30 楼 fins 2007-06-06  
spring != ioc
spring > ioc

ioc的目标 != 建立统一的对象装配器,对象提取器
ioc的目标 > 建立统一的对象装配器,对象提取器


取消精华吧


29 楼 ddandyy 2007-06-06  
为什么不接着往下说呢 只举一两个例子说你完成了这个功能又有什么作用呢 如果真的是拼代码  可能比你这个代码更少的也能做到同样的功能

另外你这个应该算是底层的class在开发中要经常编译吧   很难想像这个class最后会有多大  比如我们这项目现在就有50多个模块了 当然你也可以把他分到多个class里  那么增减模块的时候不知道你要修改多少个底层的class  你们又是如何保证修改底层class不会影响到其他的业务呢

其他功能呢?比如事务回滚什么的  当然了  我们也都知道那个很简单 就是在那写个try catch嘛 那这50个多个模块的回滚你要怎么做?

不知道如果LZ把其他所有功能都做出来的话是否也会写个2M的东西出来
当然xml可能是一个都没有了

性能如何 BUG会不会有 TEST的是否彻底

不知能否和经过成千上万的盲从的人一起test后的东西拼一拼
28 楼 dennis_zane 2007-06-06  
gigix 写道
dovecat 写道
说实话,一位具有精湛技艺的Coder,确实Spring的价值对他来说也不过就是一个用起来稍微称手点的工具而已,必要的时候,他完全可以依据自己的需要抛开spring.
框架这东西,用多了就那么回事.看得太重也不好,重要的是框架背后的设计思想和风格.

同样,从对框架的批评上也能看出设计思想和风格
furthermore,从“根本不清楚设计思想和风格就敢批评”这件事上,还能看出更多


同感,如果对框架本身的设计思想没有真正地去了解就信口开河地指责别人盲从,还要加上“创新”这样的大词,未免让人觉的很幽默。
27 楼 dovecat 2007-06-06  
gigix 写道
dovecat 写道
说实话,一位具有精湛技艺的Coder,确实Spring的价值对他来说也不过就是一个用起来稍微称手点的工具而已,必要的时候,他完全可以依据自己的需要抛开spring.
框架这东西,用多了就那么回事.看得太重也不好,重要的是框架背后的设计思想和风格.

同样,从对框架的批评上也能看出设计思想和风格
furthermore,从“根本不清楚设计思想和风格就敢批评”这件事上,还能看出更多
HOHO~确实,从这点上就可以说这个帖子没任何价值.反有误导的嫌疑.
26 楼 gigix 2007-06-06  
dovecat 写道
说实话,一位具有精湛技艺的Coder,确实Spring的价值对他来说也不过就是一个用起来稍微称手点的工具而已,必要的时候,他完全可以依据自己的需要抛开spring.
框架这东西,用多了就那么回事.看得太重也不好,重要的是框架背后的设计思想和风格.

同样,从对框架的批评上也能看出设计思想和风格
furthermore,从“根本不清楚设计思想和风格就敢批评”这件事上,还能看出更多
25 楼 dovecat 2007-06-06  
说实话,一位具有精湛技艺的Coder,确实Spring的价值对他来说也不过就是一个用起来稍微称手点的工具而已,必要的时候,他完全可以依据自己的需要抛开spring.
框架这东西,用多了就那么回事.看得太重也不好,重要的是框架背后的设计思想和风格.
24 楼 Godlikeme 2007-06-06  
这个精华评的莫明其妙
23 楼 maxima 2007-06-06  
lz的话有点道理
不过srping一个小小的不爽而已,就这样否定spring怀疑你对他的了解有多少

相关推荐

    spring-boot mybaits spring security redis整合

    注解redis缓存数据,Spring-session和redis实现分布式session同步(建议按功能模块划分系统)。 6、日志 =========== logback打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 9、...

    14031069-SPRING BOOT实战=SPRING BOOT IN ACTION-p210.pdf

    14031069-SPRING BOOT实战=SPRING BOOT IN ACTION-p210.pdf

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...

    spring aop ioc实例

    Spring AOP和IOC是Spring框架的核心特性,它们极大地简化了企业级Java应用的开发。AOP(面向切面编程)允许我们分离关注点,将横切关注点(如日志、事务管理)从核心业务逻辑中解耦出来。而IOC(控制反转)则是...

    spring3.1 官方全部jar包

    spring3.1官方所有的jar包 org.springframework.aop-3.1.RELEASE.jar org.springframework.asm-3.1.RELEASE.jar org.springframework.aspects-3.1.RELEASE.jar org.springframework.beans-3.1.RELEASE.jar org....

    spring_MVC源码

    弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...

    spring4.3.1官方全套jar包下载

    spring4.3.1全套jar下载。 4.3.1/spring-aop-4.3.1.RELEASE.jar 4.3.1/spring-aspects-4.3.1.RELEASE.jar 4.3.1/spring-beans-4.3.1.RELEASE.jar 4.3.1/spring-context-4.3.1.RELEASE.jar 4.3.1/spring-core-4.3.1....

    spring-boot-mail

    spring boot 邮件发送,亲测可用 #字符集 spring.mail.default-encoding=UTF-8 #电子邮件地址 spring.mail.host=smtp.126.com #Application spring.application.name=SEND-MAIL #授权密码 spring.mail.password=...

    spring3.0.5 所有jar文件

    包含spring 3.0.5的所有jar文件: org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE...

    spring-mock.jar

    Classes contained in spring-mock.jar: org.springframework.mock.jndi.ExpectedLookupTemplate.class org.springframework.mock.jndi.SimpleNamingContext.class org.springframework.mock.jndi....

    spring整合rabbitmq需要的jar包(spring版本4.2.0)

    在IT行业中,Spring框架是Java应用开发中的一个关键组件,它提供了一整套服务来简化企业级应用的构建。RabbitMQ则是一个流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于高效地...

    Spring Boot整合SpringDataJPA

    在现代Java Web开发中,Spring Boot框架以其便捷的配置、快速的应用启动以及强大的依赖管理而备受推崇。Spring Data JPA是Spring生态系统中的一个重要组件,它为开发者提供了与JPA(Java Persistence API)交互的...

    spring4.x中的jar包下载,spring4.0.6下载,spring最新稳定版jar包下载

    spring4.x中的jar包下载,spring4.0.6下载,spring最新稳定版jar包下载 http://maven.springframework.org/release/org/springframework/spring/ 这个链接中有各种稳定版的jar包下载 目前官网上大部分都要maven下载

    Spring4.0+Hibernate4.0+Struts2.3整合案例

    Spring4.0+Hibernate4.0+Struts2.3整合案例:实现增删改查。 ===================== application.xml: &lt;?xml version="1.0" encoding="UTF-8"?&gt; xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    传智播客2016spring资料4

    标题“传智播客2016spring资料4”揭示了这是一份关于Spring框架的教育资料,特别关注的是2016年传智播客教学课程中的第四天内容。传智播客是一家知名的IT教育机构,其课程通常深入浅出,适合初学者和有一定经验的...

    Spring-Boot-Demo

    《Spring Boot整合Mybatis与Druid数据库连接池的实践详解》 在当今的Java开发领域,Spring Boot以其简洁、高效的特点成为了主流的框架选择。它极大地简化了项目的配置和启动流程,使得开发者能够更加专注于业务逻辑...

    Spring攻略(第三版)源代码

    Spring Recipes 3rd Edition Sources === These are the sources belonging to Spring Recipes 3rd Edition. Each chapter has its own sources and each chapter can contain multiple source snippets TOC --- ...

    SpringQuartz的使用文档

    SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

    最新spring官网下载jar包 spring-4.2.4(免费)

    Spring框架是Java开发中不可或缺的一部分,它以其模块化、易用性和灵活性著称。Spring-4.2.4是该框架的一个稳定版本,为开发者提供了丰富的功能和改进。在这个版本中,Spring团队继续致力于提高性能、增强可维护性和...

Global site tag (gtag.js) - Google Analytics