context

spring启动流程

自古美人都是妖i 提交于 2020-02-29 03:09:54
转载:https://www.cnblogs.com/luoluoshidafu/p/6442055.html 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境; 其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。在这个IoC容器初始化完毕后,spring以WebApplicationContext.ROOT WEB APPLICATION CONTEXT ATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取; 再次,contextLoaderListener监听器初始化完毕后,开始初始化web

spring 启动过程

别等时光非礼了梦想. 提交于 2020-02-29 03:09:34
首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境; 其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。在这个IoC容器初始化完毕后,spring以WebApplicationContext.ROOT WEB APPLICATION CONTEXT ATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取; 再次,contextLoaderListener监听器初始化完毕后,开始初始化web.xml中配置的Servlet,这个servlet可以配置多个,以最常见的DispatcherServlet为例

Java程序员常用的@Component、@Repository、@Controller、@Serv

情到浓时终转凉″ 提交于 2020-02-28 22:53:29
Java程序员常用的@Component、@Repository、@Controller、@Service系列【案例demo3】 很多程序员通过在类上使用@Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与@Repository 是完全相同的。 处理类:org.springframework.context.annotation.ScannedGenericBeanDefinition [if !supportLists]· [endif]项目包结构 F:. ├─java │ └─com │ └─example │ └─demo3 │ │ Demo3Application.java │ │ │ ├─controll │ │ StuController.java │ │ │ ├─dao │ │ StuDao.java │ │ StuDaoImp.java │ │ │ ├─entity │ │ Stu.java │ │ │ └─server │ StuService.java │ StuServiceImp.java │ └

android SQLiteOpenHelper使用示例

…衆ロ難τιáo~ 提交于 2020-02-28 22:10:25
我们大家都知道Android平台提供给我们一个数据库辅助类来创建或打开数据库,这个辅助类继承自SQLiteOpenHelper类,在该类的 构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象。继承和扩展SQLiteOpenHelper类主要做的工作就是重写以下两个 方法。 onCreate(SQLiteDatabase db) : 当数据库被首次创建时执行该方法,一般将创建表等初始化操作在该方法中执行。 onUpgrade(SQLiteDatabse dv, int oldVersion,int new Version):当打开数据库时传入的版本号与当前的版本号不同时会调用该方法。 除了上述两个必须要实现的方法外,还可以选择性地实现onOpen 方法,该方法会在每次打开数据库时被调用。 SQLiteOpenHelper 类的基本用法是:当需要创建或打开一个数据库并获得数据库对象时,首先根据指定的文件名创建一个辅助对象,然后调用该对象的getWritableDatabase 或 getReadableDatabase方法 获得SQLiteDatabase 对象。 调用getReadableDatabase 方法返回的并不总是只读数据库对象,一般来说该方法和getWriteableDatabase 方法的返回情况相同

Android 反射-换一种方式编程

北城以北 提交于 2020-02-28 21:08:16
Android 反射-换一种方式编程 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/59109933 本文出自 【赵彦军的博客】 上一次写了一篇文章 Java 反射 使用总结 , 今天算是对反射的补充,只不过把反射用到了Android层面上。 首先创建工具类 ResourceUtils package com.app.fanse; import android.content.Context; import android.graphics.drawable.Drawable; public class ResourceUtils { public static int getIdByName(Context context, String className, String name) { return context.getResources().getIdentifier(name, className, context.getPackageName()); } /** * 获取布局文件的资源ID * @param context * @param name * @return */ public static int getIdFromLayout(Context context, String name)

OpenGL ES学习笔记(三)——纹理

此生再无相见时 提交于 2020-02-28 12:40:25
首先申明下,本文为笔者学习《OpenGL ES应用开发实践指南(Android卷)》的笔记,涉及的代码均出自原书,如有需要,请到原书指定 源码地址 下载。 《 OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成 》中阐述的平滑着色、自适应宽高是为了实现在移动端模拟真实场景采用的方法,并且通过w分量增加了三维视角,在具体实现上采用了正交投影、透视投影的理论。本文将在此基础上,构建更加精美的三维场景。三维效果本质上是点、直线和三角形的组合,纹理是将图像或者照片覆盖到物体表面,形成精美的细节。在实现上具体分为两步:1)将纹理图片加载进OpenGL;2)OpenGL将其显示到物体表面。(有点像把大象装进冰箱分几步~~~)不过,在实现过程中,涉及到着色器程序的管理,涉及到不同的纹理过滤模式,涉及到顶点数据新的类结构等问题,下面将一一对其阐述: 纹理加载 纹理着色器 更新顶点数据类结构 着色器程序类 纹理绘制 一、纹理加载 将纹理覆盖到物体表面,最终是通对齐坐标来实现的。而OpenGL中二维纹理的坐标与计算机图像的坐标并不一致,因此,首先对比下两者的不同。 可见,两者的差别在于绕横轴翻转180度。另外,OpenGL ES支持的纹理不必是正方形,但每个维度都必须是2的幂。 加载纹理图片的方法参数列表应该包括Android上下文(Context)和资源ID

实验16:使用context:include-filter指定扫描包时要包含的类 实验17:使用context:exclude-filter指定扫描包时不包含的类

自古美人都是妖i 提交于 2020-02-28 12:20:06
实验17:使用context:exclude-filter指定扫描包时不包含的类 扫描的时候可以排除一些不要的组件 type="annotation" 指定排除规则,按照注解进行排除。标注了指定注解的组件不要 expression="" 注解的全类名 type="assignable" 指定排除某个具体的类,按照类排除 expression="" 类的全类名 type="aspectj" aspectj表达式 type="custom" 自定义一个TypeFilter; 自己写代码决定哪些要使用 type="regex" 写正则表达式 实验16:使用context:include-filter指定扫描包时要包含的类 来源: CSDN 作者: 小草dym 链接: https://blog.csdn.net/qq_39368007/article/details/104552239

Spring Boot实战笔记(六)-- Spring高级话题(多线程)

天大地大妈咪最大 提交于 2020-02-28 07:21:18
一、多线程   Springt通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor。而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync 开启对异步任务的支持,并通过实际执行Bean的方法中使用@Async注解来声明其是一个异步任务。 示例:   1.配置类。 package com.ecworking.async; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling

Gong服务实现平滑重启分析

吃可爱长大的小学妹 提交于 2020-02-28 06:02:22
平滑重启是指能让我们的程序在重启的过程不中断服务,新老进程无缝衔接,实现零停机时间(Zero - Downtime)部署; 平滑重启是建立在优雅退出的基础之上的,之前一篇文章介绍了相关实现:Golang中使用Shutdown特性对http服务进行优雅退出使用总结 目前实现平滑重启的主要策略有两种: 方案一:我们的服务如果是多机器部署,可以通过网关程序,将即将重启服务的机器从网关下线,重启完成后再重新上线,该方案适合多机器部署的企业级应用; 方案二:让我们的程序实现自启动,重启子进程来实现平滑重启,核心策略是通过拷贝文件描述符实现子进程和父进程切换,适合单机器部署应用; 今天我们就主要介绍方案二,让我们的程序拥有平滑重启的功能,相关实现参考一个开源库:https://github.com/fvbock/endless 实现原理介绍 http 连接介绍: 我们知道,http 服务也是基于 tcp 连接,我们通过 golang http 包源码也能看到底层是通过监听 tcp 连接实现的; func (srv * Server) ListenAndServe() error { if srv. shuttingDown() { return ErrServerClosed } addr := srv. Addr if addr == "" { addr = ":http" } ln ,

Mapreduce执行过程分析(基于Hadoop2.4)——(三)

安稳与你 提交于 2020-02-28 03:39:21
4.4 Reduce类 4.4.1 Reduce介绍 整完了Map,接下来就是Reduce了。YarnChild.main()—>ReduceTask.run()。ReduceTask.run方法开始和MapTask类似,包括initialize()初始化,根据情况看是否调用runJobCleanupTask(),runTaskCleanupTask()等。之后进入正式的工作,主要有这么三个步骤:Copy、Sort、Reduce。 4.4.2 Copy Copy就是从执行各个Map任务的节点获取map的输出文件。这是由ReduceTask.ReduceCopier 类来负责。ReduceCopier对象负责将Map函数的输出拷贝至Reduce所在机器。如果大小超过一定阈值就写到磁盘,否则放入内存,在远程拷贝数据的同时,Reduce Task启动了两个后台线程对内存和磁盘上的文件进行合并,防止内存使用过多和磁盘文件过多。 Step1: 首先在ReduceTask的run方法中,通过如下配置来mapreduce.job.reduce.shuffle.consumer.plugin.class装配shuffle的plugin。默认的实现是Shuffle类: 1 Class<? extends ShuffleConsumerPlugin> clazz = job.getClass