龙潭书斋 -- 308




概述上一篇日志中,我们讲解了如何创建并使用切面,AspectJ5 引入了使用注解来创建切面的新特性使用注解的方式定义切面,为应用程序带来了非常大的便捷性,也让代码更加美观在学习了上一篇日志中使用 xml 定义切面以后,这一节中的介绍会让你觉得非常简单Spring 面向切面实例讲解 为了支持使用注解定义面向切面的功能,需要在 xml 中写入:<aop:aspectj-autoproxy/> <!-- 支持面向切面注解 -->  前置切面和后置切面还记得上一篇日志中的 Audience 类吗?现在我们只需要为他的每个方法都加上一个注解,而舍弃冗长的 xml:package com.techlog.test.service; import org.aspectj.lang.annotation.*; /** * Created by techlog on 16/3/25. */ @Aspect public class Audience { @Pointcut("execution(* com.techlog.test.service.Performer.perform(..))") // 定义切点 public
#技术帖    #web    #龙潭书斋    #framework   

200x200


概述上一篇日志中,我们介绍了 spring aop 的基本概念,本篇日志你将看到全面的 AOP 用法和实例 pom.xml 依赖首

#技术帖    #web    #xml    #龙潭书斋   

200x200


概述前面几篇日志,我们介绍了让软件组件保持松散耦合的依赖注入机制:Spring Bean 面向切面的 AOP 编程允许你把遍布在应用各处的功能分离出来形成可重用组件通常,

#技术帖    #web    #xml    #龙潭书斋   
构造器注入在实际的应用中,往往会有很多类之间相互协作完成特定的业务逻辑,每个对象负责管理与自己相互协作的对象的引用,这就造成高度的耦合和难以测试的代码考虑下面的例子:public class DamselRescuingKnight implements Knight { private RescueDamselQuest quest; public DamselRescuingKnight() { quest = new RescueDamselQuest(); // 与 RescueDamselQuest 紧耦合 } public void embarkOnQuest() throws QuestException { quest.embark(); } }  这里我们创建了一个骑士类,这个骑士紧密的与 RescueDamselQuest 耦合在一起,结果是这个骑士只能去拯救少女,而不能去杀掉一条恶龙,不能去参加一场决斗同时,当你需要测试这个骑士的对象时,必须保证 embarkOnQuest 方法调用的同时 RescueDamselQuest 的 embark 方法也被调用 通过依赖注入,可以将这样的耦合松散化public clas
#技术帖    #web    #xml    #龙潭书斋   
概述编程中很大部分的问题只需要使用顺序编程来解决,然而,对于某些问题,需要并发的同时执行程序中多个部分则是十分方便且有必要的,尤其是在多处理器的环境中,多个部分的代码可以实际上同时执行可以极大地提高程序的执行速度,同时也可以提供更加易用的模型然而,当你企图使用并发执行任务进行编程,问题也会接踵而至,并发程序的同步问题,内存空间的共享问题等等,因此并发有时是危险的 多线程机制java 的并发是通过多线程机制实现的,每一个子任务都将有一个执行线程驱动,一个线程就是在进程中的单一顺序控制流 java.lang 包提供了三种实现多线程开发的工具:Callable 接口Runnable 接口Thread 类 他们的区别在于:Callable 任务执行后可以具有返回值,在任务执行过程中也可以抛出异常,而 Runnable 和 Thread 都不行运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果,而 Runable 和 Thread 都不行Thread 是通过实现 Runnable 接口实现的,因此可以认为&
#技术帖    #龙潭书斋    #线程    #thread   
概述泛型是 java SE5 开始支持的特性,他可以指定一个“适用于很多类的类型”,也就是参数化类型,使程序可以应用于多种类型,这样泛化的思想为程序设计增添了更高的灵活性泛型最有用的地方就是创造容器类 泛型类和接口的最基本用法下面的例子展示了泛型的基本用法:package com.techlog.test; class Temp { } public class Test<T> { private T a; public Test(T a) { this.a = a; } public T getA() { return a; } public static void main(String[] argv) { Test<Integer> test = new Test<>(5); Test<Temp> tempTest = new Test<>(new Temp()); System.out.println(test.getA()); System.out.println(test.getClass() == tempTest.getClass());
#技术帖    #龙潭书斋    #容器    #java   
概述RTTI 即 Run-Time Type Identification,运行时类型检查,这个机制让你的程序中某个数据的类型信息直到运行时才被发现和使用java 提供了两大类 RTTI 机制,一种是“传统的”RTTI,他要求我们在编译时已知所有类型,另一种是反射机制,他允许我们在运行时才发现和使用类型信息 RTTI 与 Class 对象最基本的 RTTI 机制就是多态的实现,比如派生类与基类之间的转型和动态绑定那么,RTTI 是如何工作的呢?RTTI 是利用 Class 对象实现的,Class 对象就是用来创建所有常规对象的,他拥有对应类的大量相关信息,每当编译器加载一个类,就会产生一个 Class 对象,类加载器首先检查这个类的 Class 是否已经被加载,如果没有被加载,类加载器就会根据类名找到对应的 .class 文件,从而创建对应的 Class 对象 Class 对象也提供了很多方法供外部使用,如:static Class<?> forName(String className) th
#读书笔记    #技术帖    #龙潭书斋    #java   
概述字符串操作是计算机程序设计中最常见的行为java 提供了三种字符串操作类:String -- 最基本的不可变字符串类型StringBuilder -- 可变字符串类型StringBuffer -- 线程安全的可变字符串类型 不可变的 StringString 对象是不可变的,所有的修改 String 对象值的方法实际上都创建了新的 String 对象,而最初的 String 对象丝毫未动package cn.techlog.tesh; import java.util.HashMap; import java.util.Map; /** * Created by techlog on 2016/2/28. */ public class Test { public static String upcase(String s) { s = s + " world"; return s.toUpperCase(); } public static void main(String[] argv) {
#技术帖    #龙潭书斋    #string    #字符串   

200x200


概述基本的语法错误会在编译期被编译器报告出来,但是更多的情况是在运行时由于种种原因导致的异常情况很多情况下,发现异常情况者不知道该如何去解决这个异常情况,因此他需要抛出异常由其他部分去解决,java&

#技术帖    #龙潭书斋    #java    #exception   

200x200


概述上一篇日志中,我们介绍了 java 基本容器中的序列容器,他们都实现了 Collection 接口Collection 及其相关实现的容器简介及用法本篇日志

#技术帖    #数据结构    #龙潭书斋    #java   



京ICP备15018585号