文档章节

Java Spring重要模式

夏至未至_super
 夏至未至_super
发布于 2016/02/01 16:03
字数 249
阅读 4
收藏 0
点赞 1
评论 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 Boot系列讲座

这里为大家推荐一个不错的Spring Boot系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施、...

杜琪 ⋅ 03/02 ⋅ 0

【小马哥】Spring Cloud系列讲座

这里为大家推荐一个不错的Spring Cloud系列讲座,讲师介绍如下: 小马哥,阿里巴巴技术专家,从事十余年Java EE 开发,国内微服务技术讲师。目前主要负责微服务技术推广、架构设计、基础设施...

杜琪 ⋅ 03/02 ⋅ 0

Spring Boot 2.0 新特性解读

点击上方“程序员小灰”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 InfoQ 作者|翟永超编辑|郭蕾Spring Boot 2.0 来啦,有哪些新特性?升级吗?写在前面 北京时...

bjweimengshu ⋅ 04/13 ⋅ 0

Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区 ⋅ 05/09 ⋅ 0

Java程序员面试大纲—错过了金三银四,你还要错过2018吗?

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己...

java高级架构牛人 ⋅ 04/27 ⋅ 0

Java高级程序员面试大纲——错过了金三,你还要错过银四吗

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己...

Java高级架构 ⋅ 04/27 ⋅ 0

SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance ⋅ 06/01 ⋅ 0

3.2 Spring AOP的设计与实现

JVM的动态代理特性 在Spring AOP实现中,使用的核心技术是动态代理,这实际上是JDK的一个特性(JDK1.3以上的版本有这个特性)。通过JDK的动态代理特性,可以为任意Java对象创建代理对象,对于...

edwardGe ⋅ 05/30 ⋅ 0

sharding-jdbc源码解析全集

sharding-jdbc源码解析之词法解析 sharding源码解析之api分析 sharding-jdbc源码解析之spring集成 sharding-jdbc源码解析之spring集成分片构造实现 sharding-jdbc源码解析之jdbc规范重写 sh...

天河2018 ⋅ 05/03 ⋅ 0

“Spring三剑客”,助你快速从月入过万的程序员到年薪百万的架构师

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 Spring作为Java开发的事实开发框架,一直以来都被开发者誉为杀手级...

异步社区 ⋅ 05/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 32分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 52分钟前 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部