因为applicationContext.xml 是唯一的,所以可以写成单例模式
package com.founder.util; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; final public class ApplicationContextUtil { /** * 由于applicationContext.xml 的唯一性,在这里可以把它写成单例模式 */ private static ApplicationContext applicationContext = null; private ApplicationContextUtil(){} //空的构造方法 static{ /** * static 静态代码快,只在该类被加载时,执行一次 */ applicationContext = new ClassPathXmlApplicationContext("com/founder/config/applicationContext.xml"); } public static ApplicationContext getApplicationContext(){ return applicationContext; } }
package com.founder.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.founder.service.UserService; import com.founder.util.ApplicationContextUtil; public class Test { public static void main(String[] arg){ /** * 传统的方法,调用UserService 的 sayHello()方法 */ /*UserService userService = new UserService(); userService.setName("Aloys"); userService.sayHello();*/ /** * 接下来,我们使用Spring的框架 * * 1.引入Spring的开发包 * 2.添加到build path路径 * 3.创建applicationContext.xml * 4.配置bean * 5.得到spring容器对象 */ /*ApplicationContext appContex = new ClassPathXmlApplicationContext("com/founder/config/applicationContext.xml"); //通过类路径来加载配置文件 UserService userService = (UserService) appContex.getBean("userService"); userService.sayHello();*/ ((UserService)(ApplicationContextUtil.getApplicationContext().getBean("userService"))).sayHello(); } }
单例模式:
0
Java 单例相关问题5
Singleton 模式主要保证在JAVA应用程序中,一个Class只有一个实例存在。一般Singleton模式通常有几种形式:
//第一种形式:定义一个类,他的构造函数为private的,它有一个静态的私有变量,在类初始化时实例化,通过一个public的getIntance方法获取对它的引用,继而调用其中的方法。 public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance() { return instance; } } //第二种形式: public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if(instance == null) { return new Singleton (); } return instance; } } }
问题补充:
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { if (instance==null) instance=new Singleton(); return instance; } }
//还可以再优化: public class Singleton { private static Singleton instance = null; public static Singleton getInstance() { if (instance !=null ) return instance ; else { } instance=new Singleton(); return instance; } } synchronized
//还可以再优化: public class Singleton { private static Singleton instance = null; public static Singleton getInstance() { if (instance !=null ) return instance ; else { } instance=new Singleton(); return instance; } } synchronized
你看完这篇http://coolshell.cn/articles/265.html
估计就全明白了
第一种不是懒惰加载,初始化会费时一点点,也许花了时间初始化后面不一定真用得上.
第二种方法如果经常被调用,因为有同步问题,会对性能有影响.
其实单例有更换的办法,可以使用内部类,枚举,或者双重锁.推荐我收藏的几个Blog给你看看.
http://chenjianjx.iteye.com/blog/1839117
http://www.importnew.com/6461.html
http://jiangzhengjun.iteye.com/blog/652440
第二种方法如果经常被调用,因为有同步问题,会对性能有影响.
其实单例有更换的办法,可以使用内部类,枚举,或者双重锁.推荐我收藏的几个Blog给你看看.
http://chenjianjx.iteye.com/blog/1839117
http://www.importnew.com/6461.html
http://jiangzhengjun.iteye.com/blog/652440
第一种问题,对象开始可以不初始化,等到获取实例的时候才初始化;
第二种问题,没有线程同步,会有线程安全问题。
package com.founder.util; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; final public class ApplicationContextUtil { /** * 由于applicationContext.xml 的唯一性,在这里可以把它写成单例模式 */ private static ApplicationContext applicationContext = null; private ApplicationContextUtil(){} //空的构造方法 static{ /** * static 静态代码快,只在该类被加载时,执行一次 */ applicationContext = new ClassPathXmlApplicationContext("com/founder/config/applicationContext.xml"); } public static ApplicationContext getApplicationContext(){ return applicationContext; } }
package com.founder.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.founder.service.UserService; import com.founder.util.ApplicationContextUtil; public class Test { public static void main(String[] arg){ /** * 传统的方法,调用UserService 的 sayHello()方法 */ /*UserService userService = new UserService(); userService.setName("Aloys"); userService.sayHello();*/ /** * 接下来,我们使用Spring的框架 * * 1.引入Spring的开发包 * 2.添加到build path路径 * 3.创建applicationContext.xml * 4.配置bean * 5.得到spring容器对象 */ /*ApplicationContext appContex = new ClassPathXmlApplicationContext("com/founder/config/applicationContext.xml"); //通过类路径来加载配置文件 UserService userService = (UserService) appContex.getBean("userService"); userService.sayHello();*/ ((UserService)(ApplicationContextUtil.getApplicationContext().getBean("userService"))).sayHello(); } }单例模式: 0
Java 单例相关问题5
Singleton 模式主要保证在JAVA应用程序中,一个Class只有一个实例存在。一般Singleton模式通常有几种形式:
//第一种形式:定义一个类,他的构造函数为private的,它有一个静态的私有变量,在类初始化时实例化,通过一个public的getIntance方法获取对它的引用,继而调用其中的方法。 public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance() { return instance; } } //第二种形式: public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if(instance == null) { return new Singleton (); } return instance; } } }
问题补充:
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { if (instance==null) instance=new Singleton(); return instance; } }
//还可以再优化: public class Singleton { private static Singleton instance = null; public static Singleton getInstance() { if (instance !=null ) return instance ; else { } instance=new Singleton(); return instance; } } synchronized
//还可以再优化: public class Singleton { private static Singleton instance = null; public static Singleton getInstance() { if (instance !=null ) return instance ; else { } instance=new Singleton(); return instance; } } synchronized
Singleton 模式主要保证在JAVA应用程序中,一个Class只有一个实例存在。一般Singleton模式通常有几种形式:
//第一种形式:定义一个类,他的构造函数为private的,它有一个静态的私有变量,在类初始化时实例化,通过一个public的getIntance方法获取对它的引用,继而调用其中的方法。 public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance() { return instance; } } //第二种形式: public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if(instance == null) { return new Singleton (); } return instance; } } }
问题补充:
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { if (instance==null) instance=new Singleton(); return instance; } }