常用工具备忘

查看项目依赖 gradle: gradle dependencies maven: mvn dependency:tree 排除依赖 不需要某个依赖或者需要替换掉某依赖时,就需要把这个依赖排除: 以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库。如果你正在构建一个生产或消

AOP 的使用

声明切点@Poincut 把切点声明成一个方法,便于重用 @Poincut 的使用格式如下: @Poincut("PCD") // 切点表达式 表示对哪些方法进行增强 public void pc(){} // 切点签名,返回值必须为 void 10 种切点表达式 AspectJ 的切点指示符 AspectJ pointcut designators (PCD) ,也就是俗称的切点表达式

面向切面的Spring

横切关注点 散播应用中多处的功能被称为横切关注点 安全就是一个关注点,每个方法或者类都需要注重安全 方法参数日志记录也是一个关注点 以及事务管理 横切关注点从概念上讲是与业务分离的,但往往会直接嵌入到业务中 多个

spring 如何解决循环依赖

什么是循环依赖 A 类中有一个属性 B ,也就是说 A 依赖 B,同时 B 类中有一个属性 A, 也就是说 B 依赖 A. 他们之间的依赖关系形成了环。就是我们说的循环依赖,如下图: 循环依赖示例 public class CircularDependenciesDemo { public static void main(String[] args) { new A1(); } } class A1 { private B1 b1;

获取正在运行的进程

获取系统中正在运行的进程。和平台无关 import ( ps "github.com/mitchellh/go-ps" ) func running() bool { processList, err := ps.Processes() if err != nil { fmt.Printf("err %v\n",err); return false } var process ps.Process num := 0 for x := range processList { process = processList[x] if process.Executable() == "test.exe" { num ++ if num >= 2 { fmt.Println("on running") return true } } } return false }

spring IOC 加载过程简要介绍

本文从源码层面简要介绍一下 Spring IoC 加载过程,以及这个过程遇到的重点方法,重点类。 new AnnotationConfigApplicationContext() 一切的根源都要从 new AnnotationConfigApplicationContext() 方法开始,这是 Spring 启动的入口,先准备如下代码: public class ContextDemo { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class); context.getBean("car",Car.class); } } @Configuration @ComponentScan(basePackageClasses = {Car.class}) class Config{ @Bean public User1 user(){

IoC 思想和实现

我们先不粘贴官方的晦涩定义,通过一个例子来一步一步的引出 IoC 思想,真正的体会到 IoC 思想对我们编程带来的益处。 车,引擎,轮胎 一个汽车需要引擎和轮胎,有下面模型: /** * 东风汽车 */ class NissanCar{ private Engine engine; private Tyre tyre; public NissanCar() { this.engine = new EngineV1(); this.tyre

自定义注解

注解也被称为元数据,它为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。 注解是受c#启发,在 javaSE5 中引入的,虽然javaSE5 预先定义了一些注解,但一般来说,主

动态代理与静态代理

代理是基本的设计模式之一,使用代理对象代替真实对象的方法调用,可以扩展真实对象某些方法的功能。 在 java 中又分为静态代理和动态代理, 先看静态代理: 静态代理 public class DynamicDemo { public static void main(String[] args) { /** * 静态代理示例 */ System.

Bean装配相关注解

@ComponentScan 启用组件扫描 默认扫描与配置类相同的包以及子包 如何扫描指定的包 @ComponentScan(“包名”) 扫描一组包: @ComponentScan(basePackages={"xxx","xxx"}) 这种两种方式都是传入字符串,无法方便的重构。因为我们的编辑器

maven完全依赖本地库

1.从可上网的外部电脑下载需要的jar包,自行传到内部电脑maven仓库对应文件夹,比如 com.alibaba.easyExcel,【注意有些包会有其他的依赖jar包,需要一同下载】 2.IDEA中添加

Callable与Future的应用

为什么需要 Callable 无论是继承 Thread 类,还是实现 Runnale 接口,或者使用线程池的 execute 方法去执行一个异步任务,都无法将这个任务的返回值带出来,以 Runnale 接口为例: /** * @since JDK1.0 */ @FunctionalInterface public interface Runnable { public abstract void run(); } 可以看到 run() 方法没有参数,没有返回值,没

并发编程之 ForkJoin 框架

什么是 Fork/Join 框架 Fork/Join 是从 java7 开始提供的并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务的结果,得到大任务结果的框架. 如下图: Fork/Join 的特性 ForJoinPool 不是为了替代 ExecutorService, 而是它的补充,在一些可分割的大任务场

idea配置和插件导入导出的方法

用idea工具自带的配置导入导出功能只能作用于配置文件,不能把插件也导出, 可以找到idea的配置目录,把配置目录覆盖的新的机器上,配置目录查找方法: 把该目录打包移动到新的机器上,用同样的方法找到新机器

定时任务和周期性任务线程池的应用及原理

在 线程池的应用 一文中,讲解了常见几种线程池的使用方法与差别,今天再深入学一下其中定时任务线程池的用法和原理。 定时任务线程池 public class User { public static void main(String[] args) { // 创建一个定时任务线程池 ScheduledExecutorService executor =Executors.newScheduledThreadPool(1); // 提交任务,1 秒后开始执行 executor.schedule(new