`

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,舒服。
分享到:
评论
22 楼 lordhong 2007-06-06  
jasongreen 写道

我们真的需要这个2M的jar包吗?


2M是SPRING的所有包, 包括MOCK, DAO, AOP, CORE, CONTEXT, ORM, WEB, WEBMVC...

你指的应该是SPRING-CORE这个JAR吧, 才几百K.
21 楼 jasongreen 2007-06-05  
daquan198163 写道

矛盾了吧?


you are so smart,but what ever,I can do anything that spring can or cant。
20 楼 daquan198163 2007-06-05  
jasongreen 写道
Alancu 写道
jasongreen 写道
统一使用ContextHolder装配,解耦了呀,不过是Context内部解耦

对于调用者,spring可以import一个xml,把别的Context的内容装配到调用者的Context中。

如果使用ContextHolder模式,如果调用者也要解耦的话,如果真的想写那么多getter和setter的话,你也可以写,然后再写个ClientContextHolder,在ClientContextHolder中取出ContextHolder中的Bean,set到想set的地方。

我们真的需要这个2M的jar包吗?没发现此模式与spring有啥区别。而且,那样需要通过属性名,来定位,中间牵涉到了一些方法调用之类的东西。性能会稍稍受影响的,虽然可以忽略。还牵涉到单例,static的赋值,等另类装配问题。

达到解耦的目的,写个全局装配器就够了。所以我才说: spring = 画蛇添足


有点无语了,OO最基本的原则,面向接口编程,如果你对此原则也有怀疑的话,只能称你一声大神了。。。


我没有否定面向接口编程,我只是将spring的xml装配方式,和用getBean(String name),用自己的代码改写了而已,我觉得这样更易调用,更快速,控制更加有力。


jasongreen 写道

而使用这种ContextHolder模式,一切是多么的简单明了,直接static的方法调用,ContextHolder.getMyDao1(),就ok了,而且少了一个2M的spring.jar,看着舒服,少了xml,看着舒服,少了一些无聊的getters and setters,舒服。


矛盾了吧?
19 楼 jasongreen 2007-06-05  
Alancu 写道
jasongreen 写道
统一使用ContextHolder装配,解耦了呀,不过是Context内部解耦

对于调用者,spring可以import一个xml,把别的Context的内容装配到调用者的Context中。

如果使用ContextHolder模式,如果调用者也要解耦的话,如果真的想写那么多getter和setter的话,你也可以写,然后再写个ClientContextHolder,在ClientContextHolder中取出ContextHolder中的Bean,set到想set的地方。

我们真的需要这个2M的jar包吗?没发现此模式与spring有啥区别。而且,那样需要通过属性名,来定位,中间牵涉到了一些方法调用之类的东西。性能会稍稍受影响的,虽然可以忽略。还牵涉到单例,static的赋值,等另类装配问题。

达到解耦的目的,写个全局装配器就够了。所以我才说: spring = 画蛇添足


有点无语了,OO最基本的原则,面向接口编程,如果你对此原则也有怀疑的话,只能称你一声大神了。。。


我没有否定面向接口编程,我只是将spring的xml装配方式,和用getBean(String name),用自己的代码改写了而已,我觉得这样更易调用,更快速,控制更加有力。
18 楼 jasongreen 2007-06-05  
z_jordon 写道
你这样和工厂有什么区别?单元测试怎么办?


spring不也是另一种工厂吗?
17 楼 radar 2007-06-05  
马甲捣乱呢
16 楼 Alancu 2007-06-05  
jasongreen 写道
统一使用ContextHolder装配,解耦了呀,不过是Context内部解耦

对于调用者,spring可以import一个xml,把别的Context的内容装配到调用者的Context中。

如果使用ContextHolder模式,如果调用者也要解耦的话,如果真的想写那么多getter和setter的话,你也可以写,然后再写个ClientContextHolder,在ClientContextHolder中取出ContextHolder中的Bean,set到想set的地方。

我们真的需要这个2M的jar包吗?没发现此模式与spring有啥区别。而且,那样需要通过属性名,来定位,中间牵涉到了一些方法调用之类的东西。性能会稍稍受影响的,虽然可以忽略。还牵涉到单例,static的赋值,等另类装配问题。

达到解耦的目的,写个全局装配器就够了。所以我才说: spring = 画蛇添足


有点无语了,OO最基本的原则,面向接口编程,如果你对此原则也有怀疑的话,只能称你一声大神了。。。
15 楼 z_jordon 2007-06-05  
你这样和工厂有什么区别?单元测试怎么办?
14 楼 jasongreen 2007-06-05  
统一使用ContextHolder装配,解耦了呀,不过是Context内部解耦

对于调用者,spring可以import一个xml,把别的Context的内容装配到调用者的Context中。

如果使用ContextHolder模式,如果调用者也要解耦的话,如果真的想写那么多getter和setter的话,你也可以写,然后再写个ClientContextHolder,在ClientContextHolder中取出ContextHolder中的Bean,set到想set的地方。

我们真的需要这个2M的jar包吗?没发现此模式与spring有啥区别。而且,那样需要通过属性名,来定位,中间牵涉到了一些方法调用之类的东西。性能会稍稍受影响的,虽然可以忽略。还牵涉到单例,static的赋值,等另类装配问题。

达到解耦的目的,写个全局装配器就够了。所以我才说: spring = 画蛇添足
13 楼 Alancu 2007-06-05  
潜水N年不能投票,,,
不过不想跟上面几位那么不厚道
楼主你想想,你这样做没解耦啊。你这样写HelloWorld的确是没问题,但是应用开发哪有这么简单?

引用
Aop和事务管理,何必一定完全交给IoC框架呢,自己编码啊

支持你搞出一个象模象样的来,我一定顶你的
12 楼 一杯白开水 2007-06-05  
不正经儿了不是~
11 楼 jasongreen 2007-06-05  
有MM加油,happpy
10 楼 lz726 2007-06-05  
偶也一直在思考,如果J2EE没有什么框架,现在的EE开发,会是怎么样的情景?


刚开始学框架的时候,就有一种排斥的思想,不知道为什么,就感觉很没意思,用别人实现的东西..哈哈,老是想着要是自己能利用那些机制搭框架就好了...

其实,框架对每个系统的适用性应该也是不同的.


不过,现在在开发过程中,也没有用到框架,但是一些实现机制,像上面说的AOP,还是不错的.

所以,赞楼主一个...加油.
9 楼 一杯白开水 2007-06-05  
其实Rod Johnson也觉得老是用xml配来配去太麻烦了, 所以spring还有一个子项目叫JavaConfig, take a glance at this link:http://www.springframework.org/javaconfig
8 楼 zrweng 2007-06-05  
嗯,来吧,就让暴风雨来的更猛烈一些吧!
7 楼 gigix 2007-06-05  
Readonly 写道
gigix 写道
……
灰常无语
为什么灰常无语呢?
因为我两年前就翻译了Martin那篇IoC框架和Dependency Injection模式
但还是有这样的筒子
洋洋千言之前连google一下都懒得
所以,只好灰常无语了

马丁叔叔就是火星来的,你还翻译火星文,就是等于画蛇添足
最烦你们这种整天炒作名词的,今天AOP,明天MOP,今天IOC,明天CIO,一点技术含量都没有。
Spring就是烂泥,Hibernate就是难用,下载了他们成千上万的次那些家伙就是盲从,楼主一人独醒,偶们皆睡。
楼主千秋万载,一桶浆糊,偶在睡梦中投楼主精华一票

恩恩……很有道理……
我也要投精华一票
6 楼 Readonly 2007-06-05  
gigix 写道
……
灰常无语
为什么灰常无语呢?
因为我两年前就翻译了Martin那篇IoC框架和Dependency Injection模式
但还是有这样的筒子
洋洋千言之前连google一下都懒得
所以,只好灰常无语了

马丁叔叔就是火星来的,你还翻译火星文,就是等于画蛇添足
最烦你们这种整天炒作名词的,今天AOP,明天MOP,今天IOC,明天CIO,一点技术含量都没有。
Spring就是烂泥,Hibernate就是难用,下载了他们成千上万次的那些家伙就是盲从,楼主一人独醒,偶们皆睡。
楼主千秋万载,一桶浆糊,偶在睡梦中投楼主精华一票
5 楼 jasongreen 2007-06-05  
gigix 写道
jasongreen 写道
你翻译了IoC和DI,不能说明IoC和DI就如何如何,用都用过了,还差google一下。
苍白的反驳,恰恰证明了我关于国人盲从的论点。

sigh sigh,是阿是阿
不过在说别人“苍白”之前,是不是应该至少了解一下别人很久以前就说过很多遍的话到底是什么呢?
不盲从、不苍白、有思想、有深度的楼主?


你为何认为我就不了解别人说过的话呢?认为我有必要google一下呢?
4 楼 gigix 2007-06-05  
jasongreen 写道
你翻译了IoC和DI,不能说明IoC和DI就如何如何,用都用过了,还差google一下。
苍白的反驳,恰恰证明了我关于国人盲从的论点。

sigh sigh,是阿是阿
不过在说别人“苍白”之前,是不是应该至少了解一下别人很久以前就说过很多遍的话到底是什么呢?
不盲从、不苍白、有思想、有深度的楼主?
3 楼 jasongreen 2007-06-05  
gigix 写道
……
灰常无语
为什么灰常无语呢?
因为我两年前就翻译了Martin那篇IoC框架和Dependency Injection模式
但还是有这样的筒子
洋洋千言之前连google一下都懒得
所以,只好灰常无语了


你翻译了IoC和DI,不能说明IoC和DI就如何如何,用都用过了,还差google一下。

苍白的反驳,恰恰证明了我关于国人盲从的论点。

相关推荐

    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