`

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,舒服。
分享到:
评论
82 楼 chinahiee 2007-08-17  
不好意思,就个人愚见,应用框架的主要目的是便于资源的统一管理,其中包括代码的可维护性和流程的统一。有些东西在开发的时候是没有那么多的时间让你去更多的考虑简洁的(其实世界本身就是矛盾的)。。。 。。。。
81 楼 fangfeixue 2007-08-14  
哇,春天过去了,夏天来了?
80 楼 jasongreen 2007-08-06  
大家还在讨论,呵呵。
我现在做的小case都在用这种方式。
还没有觉得有什么情况是非用spring不可的。
79 楼 cuishen 2007-08-04  
呵呵,不一样的声音,有个性
78 楼 lewisou 2007-08-03  
作者真是典型的作者所说的“中国程序员”
77 楼 xpf7622 2007-07-31  
   看了虽然觉得可笑,但是敢于批判的精神还是不错的,这样才会有发展.但不要盲目的批判,得有深厚的理论和丰富的实践经验才可以.
    不批评楼主,但是送楼主一句话,牛不是吹出来的,批判之前自己要真正理解Spring.
   
76 楼 a2s 2007-07-29  
看了lz的帖子,发现生活并不是很无聊。
75 楼 zb1015 2007-07-25  
引用
lgx522     2007-06-22 17:05
Spring是当前企业应用架构的最佳选择。
Spring这东西,刚开始用有点烦,再用下去就会产生怀疑,等有机会用在复杂系统的时候,才能真正体会到解耦合带来的种种好处。如果有兴趣研究一下其设计思想和源代码,那才真是妙不可言。


你把你的复杂项目拿出来看看,我的看法正好相反,越复杂的项目越越不能用什么sp,hb
74 楼 zb1015 2007-07-25  
好好好,楼主我支持你,去死吧sp,hb
73 楼 g_wf 2007-07-24  
把帖子和所有的回复看了一遍,不错阿,很少能见到这样的帖子了,看来我们做软件的还是最优幽默感的!

支持楼主,多发些这样的帖子,不然生活很无味!
72 楼 hamlet 2007-07-19  
用框架无非是以下两种原因:公司没有能力自己开发框架所实现的功能,或者开发费用比较高,老板不赚钱,尤其对于项目主导的公司
71 楼 sariy 2007-07-11  
世上没有完美的东西 。,
  都是相互融合 达到最好效果 。,

 
70 楼 shily536 2007-06-29  
哈哈,这么多人发表意见,我也来凑凑热闹。。
首先,LZ的出发点是很好的,现在很多程序员确实只是盲从,他们只知道用框架,仅仅是使用,而没注意到框架的思想以及机制。这个对他们来说并不是一件好事情,就像流水线上的工人,每天只知道上螺丝钉。。
其次,LZ的观点应该是太狭隘,框架的目的是给大家一个规则,提供一个摸板(暂时这么比喻吧),如果一个项目,有100个人开发,大家都自己写自己的代码,那到时候整合,管理以及维护将会是件十分恐怖和困难的事情。但是如果一个项目就只有一个人开发,那使用框架将会显得麻烦,而且多余(当然是对有一定水平的CODER来说)

最后总结一下,大项目用框架那是趋势,利大于弊,哦不对,应该是利远大于弊,当然了,如LZ所说,你可以自己写代码来实现,但是,对老板来说,有现成的干嘛不用,让你写新的,一切都是未知数,简直太冒险。。。至于小项目嘛,或者说个人学习,那就没必要用框架了。。




69 楼 lgx522 2007-06-22  
Spring是当前企业应用架构的最佳选择。
Spring这东西,刚开始用有点烦,再用下去就会产生怀疑,等有机会用在复杂系统的时候,才能真正体会到解耦合带来的种种好处。如果有兴趣研究一下其设计思想和源代码,那才真是妙不可言。
68 楼 tntxia 2007-06-21  
有反抗意识是好的。
67 楼 aninfeel 2007-06-21  
引用
最烦你们这种整天炒作名词的,今天AOP,明天MOP,今天IOC,明天CIO,一点技术含量都没有。

其实还有更悲哀的——感觉java也是操作出来的
66 楼 jd2bs 2007-06-20  
旗帜鲜明顶楼主啊 软件开发这行业挺烦的 大家改行巴
65 楼 marine_chen 2007-06-19  
LZ是有一定想法的,不过从客观的说,spring有利有弊,配置确实是很麻烦,但如果项目比较大的话,各个部分之间的松散耦合就非常重要了,而spring就能发挥它的作用了。

LZ的观念比较适合开发一些小型项目,否则写程序变的简单,项目管理则难于上青天了。
64 楼 jerry 2007-06-18  
大家不要文人般的尖酸刻薄好不好,没劲。文人程序员不要相轻。
63 楼 qingzhuang 2007-06-18  
赞一个

相关推荐

    spring-boot mybaits spring security redis整合

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

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

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

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

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

    spring aop ioc实例

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

    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...

    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....

    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整合rabbitmq需要的jar包(spring版本4.2.0)

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

    spring_MVC源码

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

    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=...

    Spring Boot整合SpringDataJPA

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

    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....

    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官网下载jar包 spring-4.2.4(免费)

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

    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是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

Global site tag (gtag.js) - Google Analytics