设为首页 加入收藏

TOP

SpringMVC+Hibernate的Web Application构建实践(一)
2017-12-06 17:35:58 】 浏览:435
Tags:SpringMVC Hibernate Web Application 构建 实践

这篇文章是关于Spring的Web程序的搭建,有什么不对的地方希望大家批评指正。


首先我们要了解什么是Spring,这里可能很多大家也都明白,无非是一个管理对象的一个容器,主要体现在IOC注入和AOP切面编程。


关于上面的两点在后面一点会给大家更具体的说明一下是什么。简单的来说,以前大家编程实例化都是自己在控制,这样真的好吗?


下面是不用Spring的写法,我们先假定有一个类是下面这样的:


public class Worker
{
    public void sayHallo()
    {
        System.out.println("hallo,I'm worker!");
    }
}


然后又有下面这个类:


public class Manager
{
    public static void main(String[] args) {
       
        Worker worker = new Worker();
        worker.sayHallo();
    }
}


很明显,是Manager类在调用Worker类,值得注意的是别人新实例化了一个Worker类,这个实例化过程是编程的人自己new的。


但是这种过程真的需要自己来做吗?因为在大家做业务的时候,会经常有这种操作,每次都手动的去做这件事好像有点麻烦。


所以spring就来解决这个问题了,有了spring,根本不需要你来做,spring帮你把这个过程给你做了,这也是我上面为什么说spring是一个容器,


在这里你可以先简单的理解为他这个容器可以容纳各种对象,并对这些对象进行管理。


说到这里,可能大家还感觉不到这个对我们编程会有多大的好处,即使下面举了例子,可能也不一定能感觉得到有什么不同,至少对没接触过spring的同学是这样。


下面我换种方式实现上面对等的功能,第一个Worker类不用变:


public class Manager
{
    private Worker worker;
   
    public static void callWorker()
    {
        worker.sayHallo();
    }
   
    public Worker getWorker() {
        return worker;
    }


    public void setWorker(Worker worker) {
        this.worker = worker;
    }
   
    public static void main(String[] args) {
        callWorker();
    }
}


这里可以看见worker并没有实例化,但再main函数中就可以直接调用了。那这个实例化的过程就是spring来做的。


那spring怎么知道为哪个类提前实例化好某个对象呢?那这个就是在spring配置文件里写好这层关系的。


spring的配置文件叫做applicationContext.xml,这里面会有这样的代码


ref的值就是指Worker类所对应的id,意味着Manager需要的Woker的实例化就解决好了,不需要我们手动的去实例化,worker变量就会自动被相对应的类型初始化好。


这个过程我们就称之为spring的IOC,这个是spring的基础,当然AOP也是在这个基础上实现的。


AOP简单的讲就是面向切面的编程,比如每当一个方法执行前都会有一个特定的函数先做其他的某种处理,可以简单的理解成这样。


 


下面理解了spring的核心原理,我们就可以尝试着去搭建响应的一些框架。


这里我们选择的搭建环境是:


mysql-5.7.17 + hibernate5 + spring5 + springMvc组件 + apache-tomcat-8.5.16 + jdk8 的web程序。


这里所有的环境变量设置就大家自己去解决了。


首先我们应该下载好spring所需要的jar包,当然还有hibernate.....等也需要jar包,这里我图方便就把


包含spring在内的以及整个工程所需要的jar包都放在了一起,由于我用的版本都比较高,所以包与包之间的冲突问题还是比较多的,


解决的过程还是比较麻烦的,好在我最后把解决好的jar包都放在一起了,这里的jar细分有hibernate5,mysqlJdbcDriver,c3p0相关jar包,


servlet,spring5等。


为了方便,我将jar放在了一个文件夹下,然后由eclipse将这个文件夹下的所有jar包设置成用户自定义库,然后在引入项目中,最后部署的时候


也把jar复制到了webContent下的lib中。



 


可以看见所有jar包都在一起,当然由于图片太长,没有截完所有的图。


然后我就将这些jar包引入了工程。



然后先来看下我的spring配置文件:



 简单的说一下,这里的所有bean对象实际上就是像我最先讲的注入是一个原理,这些bean都被放入了spring容器中,他们的相互关系可以从配置文件中看出来。


其中一个localSessionFactoryBean是管理hibernate的会话的,所有的会话都来由这里管理。其实这个配置可以更复杂的,比如hibernate.cfg.xml这种引用方式可以变成更多的property设置,因为


hibernate.cfg.xml中含有很多配置,有的人喜欢将hibernate的所有配置都写在applicationContext.xml中,但实际上是没必要的,因为常用的是在程序中或许hibernate的会话工厂就行了。


后面代码中也会给大家展示一下,另外代码中我也实现了hibernate会话工厂的单例模式。


另外一个值得注意的是我自定义了一个springContextUtil类,这个类实现了将Spring应用上下文环境ApplicationContext放入一个静态变量中,以便后期业务编写的时候用到ApplicationContext,


实现的原理是实现ApplicationContextAware接口,springContextUtil还定义了一个getBean函数,可以通过id名随时取到bean对象,这个也是后期很需要的。


可以看下springContextUtil的实现:



然后是hibernate单例模式的会话工厂实现:



在spring的applicationContext.xml中我们还可以看到我还实现了AOP,比如方法前的调用,方法后的调用,以及异常的时候调用。


这些切面实现在后期业务代码过程中,只需要简单的改下配置文件就可以做到aop编程,

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Kotlin Native新增Objective-C互.. 下一篇Mybatis的搭建和Spring注入方式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目