本系列博客为spring In Action 这本书的学习笔记 早在第一篇Spring的博客里面就提到过, Spring采取了四种策略来简化Java开发, 前几篇博客着重讲了其中的一种策略: 依赖注入(DI). 那么这篇博客就要学习Spring的另一个简化Java开发的策略: 面向切面编程(AOP). DI为了使应用对象之间解耦, 而AOP则是为了使横切关注点与它们所影响的业务逻辑之间解耦. 一. 什么是面向切面编程? 在之前的Java开发中, 如果想要重用通用功能的话, 我们会使用面向对象技术中的继承或委托. 但是如果整个应用中都使用相同的基类, 继承往往会导致一个比较脆弱的对象体系, 委托可能需要对委托对象进行复杂的调用. 现在, 切面提供了取代继承和委托的另一种方案, 就是面向切面编程. 先来看一下我们在第一篇Spring博客中对面向切面编程的介绍: 面向切面编程能将遍布应用各处的功能分离出来形成可重用的组件. 我们可以这样理解面向切面编程: 面向对象编程(OOP) 继续阅读 >>


祝一迪 17/10/16 18:03:41
本系列博客为spring In Action 这本书的学习笔记 我们知道Spring的特性之一就是它的依赖注入机制. 那么当我们提到依赖注入最先想到的应该是Bean与Bean之间的依赖注入, 也就是我们前面大篇幅谈到的装配Bean, 但是依赖注入的另一个方面就是指将一个值注入到Bean的属性或者构造器参数中, 本篇博客就是来探讨一下关于值注入的一些问题. 一. 运行时值注入 在说明运行时值注入之前, 我们先来看一下在前面的博客里出现过的值注入的例子. 程序1: 在JavaConfig中的值注入的例子 @Bean public CompactDisc jay(){ return new Jay("魔杰座", "周杰伦"); } 程序2: 在XML中的值注入例子 <bean id="jay" class="AssemblingBean.SoundSystem_XML.Jay" > <constructor-arg index="0" valu 继续阅读 >>


祝一迪 17/10/12 00:59:36
本系列博客为spring In Action 这本书的学习笔记 本篇博文说是装配Bean的一些高级装配, 其中包括了环境与profile/条件化的Bean/处理自动装配的歧义性/Bean的作用域. 一. 环境与profile 我们在开发软件的时候, 有一个很大的挑战就是我们要将应用程序从开发环境迁移到生产环境. 开发环境的一些做法可能并不适合生产环境, 甚至即便迁移过去也无法正常工作. 数据库配置/加密算法以及外部系统的集成是跨环境部署时回发生的及各例子. 下面以一个数据库的例子来分析一下这种情况. 现在我们需要创建一个dataSource Bean, 在开发环境中, 使用一个嵌入式数据库回大大提高开发效率, 减少dataSource的复杂性, 并且可以使得每次启动数据库时, 它都处于一个给定的状态. 比如: 程序1: 开发时期的DataSource Bean @Bean(destroyMethod = "shutdown") public DataSource dataSo 继续阅读 >>


祝一迪 17/10/09 22:47:57
一. TCP/IP四层模型 前面我们提到过OSI七层模型, 首先来看一下TCP/IP四层模型与OSI七层模型之间的大致对应关系以及各层对应的部分网络协议. 下面我们就TCP/IP每层的功能以及每层的重要协议做一个简单了解. 1. 数据链路层 根据TCP/IP模型与OSI模型的对应关系我们可以看出, TCP/IP里面的数据链路层包含了OSI里面的数据链路层与物理层. OSI的物理层是负责数据传输的硬件, 比如双绞线电缆/无线/光纤等, 主要进行比特流的传输. OSI的数据链路层主要负责物理寻址, 同时将原始比特流变为逻辑传输线路. 而TCP/IP中的数据链路层就包括了物理层和链路层. 物理层部分是计算机硬件, 比如网络接口卡等; 而链路层部分就相当于驱动程序. 链路层在计算机硬件和操作系统之间的一个桥梁. 2. 网络层 网络层负责地址管理和路由选择. 网络层主要使用的协议为IP协议. IP协议基于IP地址转发分包数据. 前面提到的数据链路层是设备驱动程序和网络接口层 继续阅读 >>


祝一迪 17/09/26 21:06:01
前言 这学期学校开了Java, 所以服务器组的小伙伴们都开心地写起了Java. 昨天晚上萌萌哒的校园问了我一个问题, 在C语言中参数的传递中, 我们可以使用指针进行传递, 从而更改参数的值, 可是在Java中, 并没有取地址操作, 也没有C++里面的引用操作, 那么应该怎样更改参数的值呢? 所以在这里来谈一谈我对Java中的参数传递的一些粗浅的认识. 1. Java中的数据类型? 在说到Java参数传递问题之前, 我们先来了解一下Java里面的数据类型. 在Java中, 有两种数据类型, 一种是基本数据类型, 一种是类类型. 类类型也称为引用数据类型. 基本数据类型就是我们常用的八大基本数据类型: short, int, long, float, double, char, byte, boolean. 在Java中是没有unsignd int这种数据类型的, 因为Java是运行于JVM之上, Java的设计就是为了脱离对计算机底层的依赖. 除了基本数据类型, 其余可以在Jav 继续阅读 >>


祝一迪 17/09/24 10:46:56
本系列博客为spring In Action 这本书的学习笔记 前言 之前在Spring学习笔记(三) — 装配Bean之通过Java代码装配Bean的最后提到: 在这里, Spring会自动给cdPlayer()方法匹配一个CompactDisc类型的Bean, 甚至这个Bean可以不在这个JavaConfig中, 它可以通过组件扫描或者通过XML进行配置来被这里的cdPlayer()方法使用. 说实话, 当时我不是很明白这段话的意思, 因为书中提到JavaConfig中被装配的Bean可以不必要是在本JavaConfig文件中声明的, 它可以来自其它的JavaConfig, 甚至都可以来自其它的XML配置文件, 于是我就去试验了一下, 我在XML中声明了一个CompactDisc Bean, 希望被本JavaConfig中的CDplayer Bean自动装配, 然而并没有成功, IDEA还是报错:没有找到匹配的Bean. 如果你也曾有这样的疑惑, 那么你就能在这篇博客里找到答案. 继续阅读 >>


祝一迪 17/09/22 20:25:48
本系列博客为spring In Action 这本书的学习笔记 在之前的两篇博客里我们说完了自动装配和通过Java代码装配Bean, 这篇博文里我们将介绍最后一种装配Bean的方式 — 通过XML装配. 1. 创建一个XML配置文件 和上一篇通过Java装配Bean的博文里面一样, 我们先来看一下在自动装配中出现过的XML文件. 程序1: 在CD播放器里面出现过的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:context="http://www.springframework.org/schema/context" xsi:schemaL 继续阅读 >>


祝一迪 17/09/20 21:08:14
本系列博客为spring In Action 这本书的学习笔记 上一篇博客中讲了自动化装配Bean, 那么这篇博客就来讲一下第二种装配Bean的方式: 通过Java代码装配Bean. 通过Java代码装配Bean 所谓通过Java代码装配Bean, 就是通过编写JavaConfig文件进行配置, 更简单地来讲, 就是在JavaConfig中声明Bean. 我们先来简单探究一下JavaConfig与一般的Java文件有什么区别. JavaConfig就是带有@Configuration注解的Java文件. 但严格意义上来讲, JavaConfig并不是Java文件, 它更接近于配置文件. JavaConfig里不包含任何的业务逻辑, 也不应该出现在任何业务逻辑的代码中, 通常情况下, 我们会将所有的JavaConfig放在单独的包中. 使用Java代码显式装配Bean, 其核心就是JavaConfig. 1. 创建JavaConfig 怎样创建JavaConfig呢? 其实关 继续阅读 >>


祝一迪 17/09/12 22:58:12
本文为一篇扫盲文, 主要是对网络中一些基础概念进行罗列和解释, 为以后学习网络打下基础. 一. 传输方式的分类 网络与通信中根据其发送数据的发送方法进行多种分类, 分类的方法也不尽相同, 以下我们来介绍几种常见的分类. 1. 面向连接型和面向无连接型 根据网络发送数据的方式, 可分为面向连接型和面向无连接型. (1) 面向连接型 : 在发送数据之前, 先要在收发主机之间建立一条通信线路, 也就是建立一条连接, 连接被关闭时无法发送数据. 举个例子, 面向连接型就像我们平时打电话, 当播通电话后, 至有当对方接听之后, 才能真正的通话, 而通话结束后, 我们也需要挂掉电话. 因此在面向连接型下, 需要在传输之前建立连接, 也需要在传输之后断开连接. 实际应用: TCP就是以面向链接的方式分组发送数据(关于分组稍后就会谈到). (2) 面向无连接型 : 面向无连接型不需要建立和断开连接, 也无需确认对端是否存在, 发送端可随时发送数据; 反之, 接收端也不知道自己会在何时从哪 继续阅读 >>


祝一迪 17/08/18 22:30:02
本系列博客为spring In Action 这本书的学习笔记 前面谈到了装配Bean可以有XML装配和基于Java的装配, 但是这两种装配都属于显式装配, 也就是说我们得手动写配置文件, 那么有没有更简便的方法呢? 就是我们今天介绍的自动化装配 ! 装配 在说自动化装配之前, 我们先来介绍一下装配, 毕竟在上一篇博客中只是粗略地提到过. 创建应用对象之间协作关系的行为称为装配, 这也是依赖注入的本质. Spring提供了3种装配机制, 它们分别为: 在XML中进行显式配置 在Java中进行显式配置 隐式的Bean发现机制和自动装配 一般来说, 这三种都是可以完成装配的, 选择哪种装配方式取决于开发者. 但是就我自己而言, 与书中作者一样, 更倾向于使用自动装配, 基于Java配置次之, 最后才是使用XML配置. 怎么说, Spring本身提供给了我们自动装配这种强大的装配机制, 我们就应该好好利用它, 单是从便利性这方面就能博得大家的青睐, 显式配置越少, 代码就越容易 继续阅读 >>


祝一迪 17/08/16 15:49:14