火箭作业系统知识总结

1.Spring设计模式-单例模式:

单例模式也属于创建型模式,所谓单例,顾名思义,所指的就是单个实例,也就是说要保证一个类仅有一个实例。
单例模式有以下的特点:
单例类只能有一个实例
单例类必须自己创建自己的唯一实例
单例类必须给所有其他对象提供这一实例

饿汉

Public class Singleton1{
Private static final Singleton1 instance=new Singleton1();
//私有的默认构造函数
Private Singleton1(){}
//静态工厂方法
Public static Singleton1 getInstance(){

Return instance;
}
} 

懒汉

Public class Singleton2{
Private static final Singleton2 instance=null;
//私有的默认构造函数
Public Singleton1(){}
//静态工厂方法
Public synchronized static Singleton2 getInstance(){

If(instance==null){

Instance=new Singleton2();
}

Return instance;
}
}

单例注册表

Import java.util.HashMap;
Public class RegSingleton{
Static private HashMap registry=new HashMap();
//静态块,在类被加载时自动执行
Static{

RegSingleton rs=new RegSingleton();

Registry.put(rs.getClass().getName(),rs);
}
//受保护的默认构造函数,如果为继承关系,则可以调用,克服了单例类不能为继承的缺点
Protected RegSingleton(){}
//静态工厂方法,返回此类的唯一实例
public static RegSingleton getInstance(String name){

if(name==null){

name=” RegSingleton”;
}
if(registry.get(name)==null){

try{

registry.put(name,Class.forName(name).newInstance());
}
Catch(Exception ex){ex.printStackTrace();}
}
Return (RegSingleton)registry.get(name);
}
}

当我们试图从Spring容器中取得某个类的实例时,默认情况下,Spring会采用单例模式进行创建。
<bean id="date" class="java.util.Date"/> 
<bean id="date" class="java.util.Date" scope="singleton"/> (仅为Spring2.0支持) 
<bean id="date" class="java.util.Date" singleton="true"/>

以上三种创建对象的方式是完全相同的,容器都会向客户返回Date类的单例引用。那么如果我不想使用默认的单例模式,每次请求我都希望获得一个新的对象怎么办呢?很简单,将scope属性值设置为prototype(原型)就可以了

<bean id="date" class="java.util.Date" scope="prototype"/>

通过以上配置信息,Spring就会每次给客户端返回一个新的对象实例。

Spring源码既采用单例注册表的形式:

public abstract class AbstractBeanFactory implements ConfigurableBeanFactory{

/**

* 充当了Bean实例的缓存,实现方式和单例注册表相同

*/

private final Map singletonCache=new HashMap();

 

public Object getBean(String name)throws BeansException{

return getBean(name,null,null);

}

...

public Object getBean(String name,Class requiredType,Object[] args)throws BeansException{

//对传入的Bean name稍做处理,防止传入的Bean name名有非法字符(或则做转码)

String beanName=transformedBeanName(name);

Object bean=null;

 

//手工检测单例注册表

Object sharedInstance=null;

 

//使用了代码锁定同步块,原理和同步方法相似,但是这种写法效率更高

synchronized(this.singletonCache){

sharedInstance=this.singletonCache.get(beanName);

}

if(sharedInstance!=null){

...

//返回合适的缓存Bean实例

bean=getObjectForSharedInstance(name,sharedInstance);

}else{

...

//取得Bean的定义

RootBeanDefinition mergedBeanDefinition=getMergedBeanDefinition(beanName,false);

...

//根据Bean定义判断,此判断依据通常来自于组件配置文件的单例属性开关

//<bean id="date" class="java.util.Date" scope="singleton"/>

//如果是单例,做如下处理

if(mergedBeanDefinition.isSingleton()){

synchronized(this.singletonCache){

//再次检测单例注册表

sharedInstance=this.singletonCache.get(beanName);

if(sharedInstance==null){

...

try {

//真正创建Bean实例


sharedInstance=createBean(beanName,mergedBeanDefinition,args);

//向单例注册表注册Bean实例

addSingleton(beanName,sharedInstance);


}


catch (Exception ex) {

 

...


}


finally{

 

...


}

}

}

bean=getObjectForSharedInstance(name,sharedInstance);

}

//如果是非单例,即prototpye,每次都要新创建一个Bean实例

//<bean id="date" class="java.util.Date" scope="prototype"/>

else{

bean=createBean(beanName,mergedBeanDefinition,args);

}

}

...

return bean;

}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值