实例化

看完后你就知道什么是依赖注入与Ioc容器了

核能气质少年 提交于 2020-01-01 07:24:22
背景 在很多编程语言(例如java)开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,一旦有修改,牵扯的类会很多。 最早在java的spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。目前许多主流PHP框架也使用了依赖注入容器,如ThinkPHP、Laravel等。 一、概念 1、容器:字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么,全部取决于你对该容器的定义。当然,现在我们讨论的是这样一种容器,它存放的不是文本、数值,而是对象、对象的描述(类、接口)或者是提供对象的回调(闭包),通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 “解耦”、“依赖注入”。 2、IoC - Inversion of Control 控制反转 控制反转是从容器的角度在描述,即:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。 3、DI - Dependency Injection 依赖注入 依赖注入是从应用程序的角度在描述,可以把依赖注入,即:应用程序依赖容器创建并注入它所需要的外部资源。 备注:依赖注入和控制反转说的是同一个东西,是一种设计模式

java学习笔记整理

感情迁移 提交于 2019-12-31 16:38:50
java知识模块: 1.基础知识,数组,字符串,正则表达式; 2.类和对象,接口,继承,多态,抽象类,内部类,泛型,java常用类库。 3.异常处理; 4.IO; 5.事件处理; 6.多线程; 7.集合类 8.网络通信; 9.JDBC操作数据库 10.反射 11.序列化 一、运行机制、内存分配 1.java执行步骤为:使用javac将.java文件编译成.class文件;然后执行一个.class文件 2.java程序在JVM内运行,具有可移植性. 3.java的参数传递是值传递,而不是引用传递。 值可以理解为内存地址,引用即是地址指向的内容。 4.栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 堆内存:堆内存用来存放由new创建的对象和数组。 5.java具有自动的垃圾收集机制。 二、类和对象 1.类是描述同一类型的对象的抽象概念,对象是类的一个具体实例。 2.对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体. 命名规范:方法和属性的第一个首单词小写,之后每个单词首字母要大写。比如getInfo(); 3.当创建类时,就是在描述那个类的对象的外观与行为。执行new来创建对象时,数据存储空间才被分配,其方法才供外界调用。 4.构造方法的名称必须与类名完全相同 。构造方法没有返回值。 5.初始化切记:初始化的顺序是先静态对象,而后是“非静态

spring 生命周期最详解

柔情痞子 提交于 2019-12-31 14:30:19
目的 在大三开始学习spring时,老师就说spring bean周期非常重要,当时也有仔细看,但是说实话搞不大懂,后面工作面试也问过,还是有点模糊,就是没有掌握好,进行深入理解,这次“老大”又问到了。不允许再回避了,所以这次坚决搞明白,理解生命周期作用,为啥要这样设计,我们能在生命周期做哪些更高层次的编程。 生命周期流程图 先总体看下spring的生命周期流程图,实现(继承)这些接口(抽象类)并在容器里注册,就可以看到bean的生命周期会按下面流程进行,后面会给出测试代码。 可以看出设计策略是“先顾大局”-类似的操作BeanFactory一般出现在Bean之前,操作完Bean之后,BeanFactory会进行“管理”;Bean操作的前提是应用了BeanPostProcessor。 测试代码 要被注册的Person类 package springBeanTest; import org.springframework.beans.BeansException; import org.springframework.beans.factory.*; public class Person implements BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean { private String name;

字节输入流和字节输出流

家住魔仙堡 提交于 2019-12-31 04:33:42
字节输入流:InputStream属于抽象类,用其子类FileInputStream进行实例化。(先定义字节数组,实例化输入流对象,读取文件内容到字节数组中,再输出) 第一种方式: package 字节流; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class InputStreamDemo01 { public static void main(String[] args) throws IOException{ File f=new File("f:"+File.separator+"File"+File.separator+"字节流.txt"); InputStream in=new FileInputStream(f);//字节流实例化 byte[] b=new byte[(int)f.length()];//新建一个字节数组,长度正好是文件的长度 in.read(b);//读取文件中的内容存储在字节数组中 in.close();//关闭输入流 System.out.println("长度:"+f.length());//输出文件的长度 System.out.println("内容为:"

ThinkPHP3.1快速入门(3)查询语言

强颜欢笑 提交于 2019-12-29 16:57:41
http://www.thinkphp.cn/info/115.html 介绍 ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取、更新和删除等操作,主要涉及到where方法等连贯操作即可,无论是采用什么数据库,你几乎采用一样的查询方法(个别数据库例如Mongo在表达式查询方面会有所差异),系统帮你解决了不同数据库的差异性,因此我们把框架的这一查询方式称之为查询语言。查询语言也是ThinkPHP框架的ORM亮点,让查询操作更加简单易懂。下面来一一讲解查询语言的内涵。 查询方式 ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。 一、使用字符串作为查询条件 这是最传统的方式,但是安全性不高,例如: $User = M ( "User" ); // 实例化User对象 $User -> where ( 'type=1 AND status=1' )-> select (); 复制代码 最后生成的SQL语句是 SELECT * FROM think_user WHERE type = 1 AND status = 1 复制代码 采用字符串查询的时候,我们可以配合使用新版提供的 字符串条件的安全预处理机制 ,暂且不再细说。 二、使用数组作为查询条件 这种方式是最常用的查询方式

SpringBoot源码分析-Tomcat-启动流程

蓝咒 提交于 2019-12-27 13:19:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇: SpringBoot源码分析-初始化Tomcat-ServletWebServerFactory实例化 在 SpringBoot源码分析-初始化Tomcat-ServletWebServerFactory实例化 讲了TomcatServletWebServerFactory的自动配置和实例化,在 Springboot源码分析-启动流程-自动配置详解 将了DispatcherServlet的自动配置,接下来就从头到尾看看Tomcat是如何一步步启动并将DispatcherServlet添加到ServletContext当中的 概要 使用时序图完成描述整个启动过程,整个过程大概分为几个步骤 Spring通过自动配置将Tomcat所需的相关类的BeanDefinition注册到容器中 Spring优先于其他Bean先实例化Web容器相关的类 在onRefresh的时候使用TomcatServletWebServerFactory创建TomcatServer并完成Server的启动 在finishRefresh的时候完成loadStartup>0的servlet启动操作,完成Tomcat所有启动操作 时序图 源码分析 自动配置相关类 请参考如下章节: SpringBoot源码分析-初始化Tomcat

Directory 与 DirectoryInfo 的区别

爱⌒轻易说出口 提交于 2019-12-27 11:02:06
Directory 与 DirectoryInfo 这两个能够实现大多数相同的功能。区别可分为两点: 一、静态与实例调用 前者必须被实例化后才能使用,而后者则只提 供了静态的方法。如果多次使用某个对象一般使用前者; 如果仅执行某一个操作则使用后者提供的静态方法效率更 高一些。 Directory 可直接调用,不需要实例化,比如 Directory.Delete(path)。 DirectoryInfo 必须实例化才能调用其方法,在频繁地操作某一目录时,这种方式比较方便。 二、功能多少 DirectoryInfo 的功能要稍微比 Directory 多些、强些,比如 DirectoryInfo 的 GetFiles 返回的是 FileInfo[],而 Directory.GetFiles 返回的是 string[]。 来源: https://www.cnblogs.com/diaomin/p/5542871.html

C#-概念-类:类

北慕城南 提交于 2019-12-27 10:41:48
ylbtech-C#-概念-类:类 类(Class)是 面向对象程序设计 (OOP,Object-Oriented Programming) 实现信息封装的基础 。类是一种 用户定义类型 ,也称 类类型 。每个类包含数据说明和一组操作数据或传递消息的函数。 类的实例称为对象 。 1. 返回顶部 1、 中文名:类 外文名:Class 类 别:一种数据类型 本 质:类型 目录 1 介绍 2 用法 3 特性 4 示例 2、 2. 返回顶部 1、 介绍 一个简单的类图 类是 面向对象程序设计 中的概念,是 面向对象编程 的基础。 类的实质是一种数据类型 ,类似于 int 、char等基本类型, 不同的是它是一种复杂的数据类型 。 因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作 。 类是对现实生活中一类具有共同特征的事物的抽象 。如果 一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改 。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使 编译器 有可能检查对象的非法使用。 类的内部 封装 了方法,用于操作自身的成员。 类是对某种对象的定义,具有行为(be-havior),它描述一个对象能够做什么以及做的方法(method)

Java 实例化类的方法

﹥>﹥吖頭↗ 提交于 2019-12-27 04:21:12
本文转载自: https://www.cnblogs.com/localhost/archive/2012/05/19/2508440.html 作者:localhost 转载请注明该声明。   Java中,类的实例化方法有四种途径: 1)使用new操作符 2)调用Class对象的newInstance()方法 3)调用clone()方法,对现有实例的拷贝 4)通过ObjectInputStream的readObject()方法反序列化类 1.ClassInstance.java 1 import java.io.* ; 2 3 class ClassInstance implements Cloneable, Serializable { 4 private String str = "测试..." ; 5 public void fun(){ 6 System.out.println(str); 7 } 8 public ClassInstance(String str){ 9 System.out.println("有参类的实例化" ); 10 this .str += str; 11 } 12 public ClassInstance(){ 13 System.out.println("无参类的实例化" ); 14 } 15 public Object clone(){

Vue(四):实例化第一个Vue应用

ぐ巨炮叔叔 提交于 2019-12-27 02:23:37
实例化语法 var vm = new Vue({ // 选项 }) Vue 构造器中的内容 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue 测试实例</title> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="vue_det"> <h1>site : {{site}}</h1> <h1>url : {{url}}</h1> <h1>{{details()}}</h1> </div> <script type="text/javascript"> var vm = new Vue({ el: '#vue_det', data: { site: "我的第一个Vue应用", url: "www.xxxxx.com", alexa: "10000" }, methods: { details: function() { return this.site + " - 学的既是技术,更是梦想!"; } } }) </script> </body> 可以看到在 Vue 构造器中有一个el 参数,它是 DOM 元素中的 id。在上面实例中 id 为 vue_det,在