欢迎阅读我的开源项目《迷你微信》服务器《迷你微信》客户端

Spring是一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。——百度百科

序言

博主在《迷你微信》服务器项目上对Spring的使用主要在于依赖注入,也是Spring的核心功能,通过依赖注入的方法,我们就可以大量的减少动态创建和单例的使用,由Spring进行创建初始化和注入。

配置与使用

关于Spring的环境配置就不在这里详细说明了,只要在项目中导入Spring的jar包和添加applicationContext.xml文件就好了,在这里咱们主要讲讲applicationContext.xml文件的配置:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!--上面的不用细看,都是配置必须的东西,主要是下面的东西 -->
<!-- Log模块 -->
<bean id="MyLogger" class="server.MyLogger">
</bean> <!-- 网络模块 -->
<bean id="ServerNetwork" class="server.ServerNetwork">
<property name="myLogger">
<ref bean="MyLogger" />
</property>
</bean>

在这里,博主删减了大量代码,只为了简要的介绍Spring的简单使用,详细代码请参考开源项目《迷你微信》服务器。首先,创建了一个叫MyLogger的Bean,这个名字是你自己起的,后面的class参数是你这个类所在的项目位置;接着,是ServerNetwork,这个类具体是干啥的这里就不介绍了,与讨论的东西无关。可以看到,ServerNetwork中有一个参数myLogger,而这个myLogger又有一个指向MyLogger的引用,代表的意义是,在Java的类ServerNetwork中,有一个叫myLogger的参数,这个参数所要设置的值为之前创建的一个叫做MyLogger的东东

这里,博主要向大家强调Spring的几个特点:

  • Spring的依赖注入是先创建好所有的bean之后,才进行参数的注入,所以不用担心bean前后顺序导致的注入null问题
  • 在要被注入的类中必须要有Set方法,比如本示例中,在ServerNetwork类中,必须有setMyLogger方法。
  • 由于注入阶段是在创建完所有bean对象后才开始的,所以不要在要创建的对象的构造方法中使用要注入的对象。

与Mina的联合使用

在使用Mina框架时,Spring是可以跟Mina紧密结合的,让Spring来创建Mina的整个连接过程是配置式编程的一种典型的做法,详细可以参考官网介绍,博主表示官网说的太简略,所以自己也只配出了一半左右。

初始化问题

由于上面所述的“由于注入阶段是在创建完所有bean对象后才开始的,所以不要在要创建的对象的构造方法中使用要注入的对象”问题,会导致很多类的初始化出现问题,因为若是将初始化方法写在构造方法中,调用到未注入的参数,就会出现NullPointer的异常,这种问题如何解决呢?博主发现了一个办法:

首先,在每个需要初始化的类中添加init()方法来进行初始化:

public class A{
public A(){
}
public void init(){
// 初始化
}
}

这样,就将初始化过程和构造方法分离开来了。然而,初始化方法何时调用呢?请接着看(代码来自开源项目《迷你微信》服务器)

public class Server {
public static void main(String[] args) throws IOException {
// 开启Spring,进行依赖注入
ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
// 调用A的初始化方法
((A) ctx.getBean("A")).init();
}
}

我们可以看到,首先,我们在最开始的Main方法内运行了applicationContext.xml文件,他是Spring的配置文件,可以开始Spring的依赖注入,然后我们从这里面,拿出已经被Spring实例化的A对象,这时,所有配置的对象都已经实例化和参数注入好了,就可以调用其中的初始化方法init()了。

欢迎阅读我的开源项目《迷你微信》服务器《迷你微信》客户端

【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:4.技术简介之Spring的更多相关文章

  1. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:0.概述

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 序言 帖主和队友仿制了一个简单版的微信,其中,队友是用Unity3D做前段,帖主用Java的Mina.Hiberna ...

  2. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 <迷你微信>服务器端是使用Java语言,Mina框架编写的,一个良好的架构关系到后期迭代的方便程度 ...

  3. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:9.观察者模式

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 在一个程序的迭代过程中,复杂度渐渐上升,可能会出现一些跨模块的调用的需求,若是直接得到引用来进行使用,会导致模 ...

  4. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:8.自定义传输协议

    欢迎阅读我的开源项目<迷你微信>服务器)与<迷你微信>客户端 前言 在上一篇中,我们讲到了<迷你微信>服务器)的主体架构,还讲到了如何在现有功能上进行拓展,但是拓展 ...

  5. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:6.技术简介之Protobuf

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 protocolbuffer(以下简称Protobuf)是google 的一种数据交换的格式,它独立于语言,独立于平 ...

  6. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:5.技术简介之Hibernate

    目录 序言 配置 hibernate.cfg.xml配置文件 加载hibernate.cfg.html配置文件并获取Session 对象的注解配置 增删改查 具体的增删改查代码 数据库操作的封装 连接 ...

  7. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统 :1.技术简介之Mina连接

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 Apache MINA(Multipurpose Infrastructure for Network Applic ...

  8. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:3.技术简介之MinaFilter——LoggingFilter (转)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 LoggingFilter 接下来,使我们对Filter介绍的最后一个——LoggingFilter. 与Proto ...

  9. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:10.项目介绍之架构(2)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 前面我们讲到<迷你微信>服务器端的主架构,现在我们来描述一下它的模块详细信息. 网络模块 从上图我 ...

随机推荐

  1. hive 面试题

    使用 Hive或者自定义 MR 实现如下逻辑 product_no lac_id moment start_time user_id county_id staytime city_id 134291 ...

  2. editplus怎么在前后插入字符

    快捷键:ctrl+h 未编辑之前: 源: 一:行首批量添加   查找"^" 替换为“我是行首aaa” 二: 行尾批量添加   查找"\n" 替换为“'bbb我是 ...

  3. POJ-3262

    Protecting the Flowers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7923   Accepted: ...

  4. Adding In-App Purchase to your iOS and OS X Applications

    Adding In-App Purchase to your iOS and OS X Applications In-App Purchase allows you to sell addition ...

  5. VMware设置桥接网络

     VMware设置桥接网络 2011-12-30 08:57:04 分类: LINUX 一.桥接网络的基本原理    配置成桥接网络连接模式的虚拟机就当作主机所在以太网的一部分, 虚拟系统和宿主机器的 ...

  6. VMware10中安装centos7没有可用的网络设备

    1.问题描述 centos7安装到虚拟机无法上网   2.安装环境 win7 x64  WM 10.01 iso  CentOS-7-x86_64-DVD-1503-01.iso  {4.01G}   ...

  7. dede问答汉字变星号

    在ask模块里面,question.php中,发现了2行代码 $data['title'] = preg_replace("#{$GLOBALS['cfg_replacestr']}#&qu ...

  8. Apache Shiro知识点总览

    名词解释 权限认证 授权 ini文件配置 jsp标签授权 Shiro会话机制 自定义Realm 加密.解密 特性 与spring整合 名词解释 Subject:认证主体 Reaml:认证来源[jdbc ...

  9. MongoDB官方C#驱动的AsQueryable踩到坑了

    collection.AsQueryable().Where()有4个重载,分别是: public static IQueryable<TSource> Where<TSource& ...

  10. Linux之用户和用户组简析

    学习网址:http://c.biancheng.net/linux_tutorial/60/