文档章节

Java Spring重要模式

夏至未至_super
 夏至未至_super
发布于 2016/02/01 16:03
字数 249
阅读 4
收藏 0

单列模式:

public class A{
    privateA(){}
    privatestatic A a = new A();
    publicstatic A getA(){
      return a;
    }
    
    privateA(){};
    privatestatic A a;
    publicstatic A getA(){
      if(a == null){
         synchronized(A.class){
             if(a == null){
               a = new A();
            }
         }
      }
      return a;
    }
}

工厂模式:

public class Factory {
    privatestatic Properties pro = new Properties();
    privatestatic Map map = new HashMap();
    static{
       try {
          InputStreamin = Factory.class.getResourceAsStream("/info.txt");
         pro.load(in);
      }  catch (IOException e) {
         e.printStackTrace();
       }
    }
   
    publicstatic Object getBean(String key){
      if(map.containsKey(key)){//判断map中是否存在键
          returnmap.get(key);
       }
      
       synchronized(map) {
         if(!map.containsKey(key)){
             StringclassPath = pro.getProperty(key);
             try {
                Class c =Class.forName(classPath);
                Object obj =c.newInstance();
               
                map.put(key,obj);
                returnobj;
             } catch(Exception e) {
               e.printStackTrace();
             }
          }
          else{
             returnmap.get(key);
          }
       }
       return null;
    }
}

代理模式:

public class DaoProxy implements InvocationHandler{
    privateObject target;
    privatestatic SessionFactory factory;
    static{
      Configuration cfg = new Configuration().configure();
      ServiceRegistry r = newServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
       factory =cfg.buildSessionFactory(r);
    }
   
    publicDaoProxy(Object target){
       this.target= target;
    }
    
    publicObject getProxy(){
       returnProxy.newProxyInstance(
            target.getClass().getClassLoader(),
            target.getClass().getInterfaces(), this);
    }

   @Override
   publicObject invoke(Object proxy, Method method, Object[] args)
          throwsThrowable {
       Sessionsession = factory.openSession();
       session.beginTransaction();
      
       ObjectreturnObj = null;
       try{
         //得到目标对象的setSession方法对象
         Method m =target.getClass().getMethod("setSession", Session.class);
         //执行setSession(),完成session属性的初始化
         m.invoke(target, session);
         
         //执行目标对象的目标方法,得到执行方法后的返回值
         returnObj =method.invoke(target, args);
         session.getTransaction().commit();
      }catch(Exception e){
         e.printStackTrace();
         session.getTransaction().rollback();
      }finally{
         session.close();
      }
      
      return returnObj;
    }

}


© 著作权归作者所有

共有 人打赏支持
夏至未至_super
粉丝 0
博文 6
码字总数 1975
作品 0
成都
Spring MVC 使用 JNDI 配置的DataSource

稍微看了下,Spring 中JNDI 的使用,弄了个小例子。有很多不完备的地方,以后慢慢看,再改吧。 <一> 技术使用 Spring MVC JDBC Template Maven JNDI <二> 一些配置 Maven POM 配置 spring-c...

平江夜弹
2015/06/29
0
0
Spring中Bean的作用域有哪些?

在Spring的早期版本中,仅有两个作用域:singleton和prototype,前者表示Bean以单例的方式存在;后者表示每次从容器中调用Bean时,都会返回一个新的实例,prototype通常翻译为原型。 补充:设...

唐怀瑟
07/25
0
0
对JDBC的支持 之 7.1 概述

概述 JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: //cn.javass.spring.chapter7. TraditionalJdbcTest @Test public void test() throws Exception { Connection co...

heroShane
2014/02/27
0
0
为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
09/18
0
0
如果你想学习Java,那么就来看这篇文章

一、前言 我是从大二开始学习的Java,当时的目标是Java Web开发,当时并不想考研,所以当时的学习是以就业为主,现在我大三了,学习Java Web开发已经一年了,因为种种原因,决定要考研,所以...

Jivanmoon
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么 vue 默认导出的是 vue.common.js,它和 vue.js 的区别在哪里,又有什么关系?

这个问题在囧克斯的博客中有提到。 Vue 最早会打包生成三个文件,一个是 runtime only 的文件 vue.common.js,一个是 compiler only 的文件 compiler.js,一个是 runtime + compiler 的文件 ...

粒子数反转
6分钟前
0
0
php正则表达式替换图片地址

<?php /*PHP正则提取图片img标记中的任意属性*/ $str = '<center><img src="/uploads/images/20100516000.jpg" height="120" width="120"><br />PHP正则提取或更改图片img标记中的任意属性<......

mdoo
9分钟前
0
0
一个简单的系统监控脚本

一个简单的系统信息监控脚本 #!/bin/bash# DATE:20181018# System monitor by Kxvzinterval=5while :doecho '==========================================================...

Kxvz
12分钟前
0
0
七牛云助你度寒冬 | 每天 10:24, 新用户抢全额免单

近年来,中美贸易战、股市暴跌、房地产变天、人民币贬值等等,企业艰难生存于冰川夹缝之中,融资发展难上加难。 凛冬将至, 七牛云特此推出免单好礼,为新用户(2018 年 10 月 10 日后新注册...

七牛云
13分钟前
0
0
Echarts X轴刻度标签换行显示

xAxis: [ { 'type':'category', splitLine: {show: false}, axisLabel: { show: true,//是否显示 interval:0,//强制显示 ......

郭周园
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部