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


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

    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()了。

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

  • 相关阅读:
    CentOS7配置VIP
    Linux定时任务crontab命令
    zabbix安装部署
    ansible部署EFK
    Python中参数的冒号与箭头表示注释
    pycharm 进行远程服务器修改与调试
    判别模型与生成模型
    写Python机器学习时的一些注意事项
    numpy基本操作
    手写神经网络
  • 原文地址:https://www.cnblogs.com/xiaozefeng/p/mina_wechat_Java_4.html
Copyright © 2020-2023  润新知