皮皮网
皮皮网

【新闻app源码 服务端源码】【thinkphp小程序源码】【躲避走砍源码】viewresolver源码

来源:天猫sdk源码 发表时间:2024-12-22 17:16:58

1.spring的源码编写流程(spring流程编排)
2.如何利用adb开启手机USB调试?
3.spring的组件及作用(springclou组件)
4.CKEditor5 + SpringBoot实战(五):SpringBoot整合Freemarker

viewresolver源码

spring的编写流程(spring流程编排)

       springmvc工作流程

       springmvc工作流程:

       1、用户向服务端发送一次请求,源码这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。源码

       2、源码DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。源码由此得知,源码新闻app源码 服务端源码该请求该由哪个Controller来处理(并未调用Controller,源码只是源码得知)。

       3、源码DispatcherServlet调用HandlerAdapter处理器适配器,源码告诉处理器适配器应该要去执行哪个Controller。源码

       4、源码HandlerAdapter处理器适配器去执行Controller并得到ModelAndView(数据和视图),源码并层层返回给DispatcherServlet。源码

       5、源码DispatcherServlet将ModelAndView交给ViewReslover视图解析器解析,然后返回真正的thinkphp小程序源码视图。

       6、DispatcherServlet将模型数据填充到视图中。

       7、DispatcherServlet将结果响应给用户。

       组件说明:

       DispatcherServlet:前端控制器,也称为中央控制器,它是整个请求响应的控制中心,组件的调用由它统一调度。

       HandlerMapping:处理器映射器,它根据用户访问的URL映射到对应的后端处理器Handler。也就是说它知道处理用户请求的后端处理器,但是它并不执行后端处理器,而是将处理器告诉给中央处理器。

       HandlerAdapter:处理器适配器,它调用后端处理器中的方法,返回逻辑视图ModelAndView对象。躲避走砍源码

       ViewResolver:视图解析器,将ModelAndView逻辑视图解析为具体的视图(如JSP)。

       Handler:后端处理器,对用户具体请求进行处理,也就是我们编写的Controller类。

       spring工作流程

       写得太笼统了,不过,spring+hibernate得基本工作流是分层得.

       也许是:

       reg页面是前台表单录入视图,提交后到RegController控制器,然后其中又封装了User和Reg得vo对象,在RegController中调用UserDAOImpl和RegImpl执行数据得保存,UserDAO是接口,UserDAOImpl实现了此接口.UserDAOImpl和RegImpl使用hibernate能力进行ROM映射,保存对象到数据库.regsuccess是保存数据成功后得返回视图.

       spirngmvc需要配置控制器映射,将访问映射到控制器上,控制器调用dao或是services层得api执行业务逻辑,然后返回视图和模型对象给前置控制器,前置控制器根据返回得信息派发视图.

Spring启动流程(一)

       以java-config形式编写一个测试demo,新建一个AnnotationConfigApplicationContext,如果是XML形式使用ClassPathXmlApplicationContext;

       两者都继承了AbstractApplicationContext类,详细看下面的层次图。

       注意:在newAnnotationConfigApplicationContext()时如果未指定参数,会报运行时异常:org.springframework.context.annotation.AnnotationConfigApplicationContext@6ebca6hasnotbeenrefreshedyet

       AnnotationConfigApplicationContext的有参构造执行了3个方法,分别是自己的无参构造、register()、refresh();

       在描述前先从网上找了一个总体流程图方便了解一下大致流程,理清思路。

       在执行AnnotationConfigApplicationContext的微跑分源码无参构造方法前会调用父类GenericApplicationContext的无参构造方法;

       GenericApplicationContext中实例化一个DefaultListableBeanFactory,也就是说bean工厂实际上是应用上下文的一个属性;

       从上面的类层次图可以看到:应用上下文和bean工厂又同时实现了BeanFactory接口。

       前面讲到我们为了解IOC使用了Spring提供的AnnotationConfigApplicationContext作为入口展开,那Spring怎么对加了特定注解(如@Service、@Repository)的类进行读取转化成BeanDefinition对象呢?

       又如何对指定的包目录进行扫描查找bean对象呢?

       所以我们需要new一个注解配置读取器和一个路径扫描器。

       AnnotatedBeanDefinitionReader中执行了AnnotationConfigUtils中的registerAnnotationConfigProcessors(this.registry)方法,会向容器注册Sprign内置的处理器。

       registerAnnotationConfigProcessors方法中通过newRootBeanDefinition(XX.class)新建一个RootBeanDefinition(BeanDefinition的一个实现),然后调用registerPostProcessor将内置bean对应的BeanDefinition保存到bean工厂中;

       这里需要说明的是:我们刚刚一直在谈到注册bean,实际上就是将内置bean对应的beanDefinition保存到bean工厂中。那为什么要保存beanDefinition呢?因为Spring是跟据beanDefinition中对bean的描述,来实例化对象的,就算自己定义的bean也是要被解析成一个beanDefinition并注册的。

       其中最主要的组件便是ConfigurationClassPostProcessor和AutowiredAnnotationBeanPostProcessor,前者是一个beanFactory后置处理器,用来完成bean的扫描与注入工作,后者是好世界源码网一个bean后置处理器,用来完成@AutoWired自动注入。

       这个步骤主要是用来解析用户传入的Spring配置类,解析成一个BeanDefinition然后注册到容器中,主要源码如下:

       通过生成AnnotatedGenericBeanDefinition,然后解析给BeanDefinition的其他属性赋值,然后将BeanDefinition和beanName封装成一个BeanDefinitionHolder对象注册到bean工厂中(就是将beanName与baenDefinition封装到Map中,将beanName放到list中。Map与list都是bean工厂DefaultListableBeanFactory所维护的属性),和前面内置bean的注册相同。

       执行到这一步,register方法到此就结束了,通过断点观察BeanFactory中的beanDefinitionMap属性可以看出:this()和this.register(componentClasses)方法中就是将内置bean和我们传的配置bean的beanDefinition进行了注册,还没处理标记了@Component等注解的自定义bean。

如何利用adb开启手机USB调试?

       打开Android手机的USB调试对于使用豌豆夹、调试程序等来说很重要。下面说说如何用代码自动打开USB调试。先分析USB调试的相关源代码。

       在 packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java 找到关于 USB Debug Enable 的代码:

       [java] view plain copy

       Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED,  0 );    

       此文件中,将根据用户设置将其值保存到 Settings 数据库中。别处将根据其值动态变化做出相应动作

       经搜索,在 frameworks/base/services/java/com/android/server/NotificationManagerService.java 中存在利用该值判断是否在状态栏中进行通知。代码如下:

       别处将根据其值动态变化做出相应动作如状态栏消息提示。

       [java] view plain copy

       void  observe() {     

       ContentResolver resolver = mContext.getContentResolver();    

       resolver.registerContentObserver(Settings.Secure.getUriFor(    

       Settings.Secure.ADB_ENABLED), false ,  this );    

       update();    

       }    

       @Override   public   void  onChange( boolean  selfChange) {     

       update();    

       }    

       public   void  update() {     

       ContentResolver resolver = mContext.getContentResolver();    

       mAdbEnabled = Settings.Secure.getInt(resolver,    

       Settings.Secure.ADB_ENABLED, 0 ) !=  0 ;    

       updateAdbNotification();    

       }    

       通过分析代码,我们可以实现用程序自动打开usb调试了。

       [java] view plain copy

       boolean enableAdb = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 0) > 0);  

       if (!enableAdb) {   

       Settings.Secure.putInt(getContentResolver(), Settings.Secure.ADB_ENABLED, 1);  

       }  

       马上进行运行,会出现异常,通过Logcat可以看到没有权限。android.permission.WRITE_SECURE_SETTINGS是不允许普通程序来执行,必须要有系统的签名或放到

       /system/app下。

       (1)、在AndroidManifest.xml加上两个权限

       [html] view plain copy

       <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission>   

       <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />  

       可以把程序push到/system/app,并对这个apk加上的权限,重启手机,可以发现usb调试自动打开了。

spring的组件及作用(springclou组件)

       ç®€è¦è¯´æ˜Žspring的两个核心功能及其作用

       spring框架是一个轻量级的开源仔伍框架,是一个IOC和AOP容器。它是低侵入式设计,独立于各种应用服务器,

       ä¾èµ–注入的特点将组件关系透明化,降低耦合度

       æŽ§åˆ¶åè½¬ï¼ˆIOC):用来降低程序代码之间的耦合度,使整个程序体系结构更加灵活,同时将类的创建和依赖关系写在配置文件里,由配置文件注入,达到松耦合的效果。

       DI(依赖注入)

       è®¾å€¼æ³¨å…¥ï¼šåº•å±‚实现set方法赋值。

       ä½¿ç”¨æž„造器注入:罩凳底层实现构造方法注入,根据bean下的参数类型和参数数量,寻找对应的构造方法。

       è‡ªåŠ¨è£…配,不能自动装配所谓的简单类型包括基本类型,字符串和集合类通常用来自动装配对象

       æŒ‰ç…§åç§°æ¥è‡ªåŠ¨è£…配底层实现是set方法

       æŒ‰ç…§ç±»åž‹æ¥è‡ªåŠ¨è£…配底层实现是set方法

       2.面向切面编程(AOP)

       æœ€ä¸»è¦çš„作用:可以在不修改源代码的情况下,给目标方法动态添加功能

       ä¸šåŠ¡é€»è¾‘就专心的处理实际需求,通用的增强功能独立出来。将安全事务等程序逻辑相对独立的功能抽取出来,利用Spring的配置文件将这些功能插进去,实现了按照切面编程,提高了复用性。

       å››ç§å¢žå¼ºæ–¹å¼ï¼š

       å‰ç½®å¢žå¼ºï¼Œåœ¨æ ¸å¿ƒåŠŸèƒ½ä¹‹å‰æ‰§è¡Œçš„额外功能

       åŽç½®å¢žå¼ºï¼Œåœ¨æ ¸ç‰©æˆšæ—…心功能之后执行的额外功能

       å¼‚常增强,在核心功能发生异常时执行的额外功能

       çŽ¯ç»•å¢žå¼ºï¼Œåœ¨æ ¸å¿ƒåŠŸèƒ½ä¹‹å‰ä»¥åŠä¹‹åŽæ‰§è¡Œçš„额外功能

       spring包含哪些组件

       Spring框架是一个分层架构,由7个定义良好的模块组成袜判。Spring模块构建在核心容器之上,核心容器竖宴定义了创建、配置和管理bean的方式,组成Spring框架的每个模块(或组件)都可以单独存告纤改在,或者与其他一个或多个模块联合实现。

SpringMVC主要组件说明

       1、前端控制器DispatcherServlet(不需要开发,由框架提供【核心】)

       DispatcherServlet是SpringMVC的入口函数。接收请求,响应结果,相当于转发器碧简,中央处理器。有了DispatcherServlet,可以大大减少其它组件之间的耦合度。

       ç”¨æˆ·è¯·æ±‚到达前端控制器,就相当于mvc模式中的c,DispatcherServlet是整个流程控制的中心,由它调用其它组件来处理用户的请求。

       2、处理器映射器HandlerMapping(不需要开发,由框架提供)

       HandlerMapping负责根据用户请求(URL),找到相应的Handler即处理器(Controller),SpringMVC提供了不同映射器实现的不同映射方式,例如:配置文件方式,实现接口方式,注解方式等。

       3、处理器适配器HandlerAdapter(不需要开发,由框架提供)

       æŒ‰ç…§ç‰¹å®šè§„则(HandlerAdapter要求的规则)去执行Handler,通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行处理。

       4、处理器Handler(需要工程师开发)

       Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下,Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况下需要工程师根据业务需求来开发Handler。

       5、视图解析器ViewResolver(不需要开发,由框架提供)

       ä½œç”¨ï¼šè¿›è¡Œè§†å›¾è§£æžï¼Œæ ¹æ®é€»è¾‘视图名解析成真正的视图(View),ViewResolver负责将处理结果生成View视图。首先,根据逻辑视图名解析成物理视图名(即具体的页面地址),再生成View视图对象,最后对View进行渲染,将处理结果通过页面展示给用户。

       SpringMVC框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。一般情况下,需要通过页面标签或页渗键面模版技术,将模型数据通过页面展示给用户,这需要由工程师根据丛慧巧业务需求开发具体的页面。

       6、视图View(需要工程师开发)

       View是一个接口,实现类才可以支持不同的View类型(jsp、freemarker、pdf...)

       æ€»ç»“:处理器Handler(也就是平常说的Controller控制器)以及视图层View,都是需要自行开发的。其他的一些组件,如:前端控制器DispatcherServlet、处理器映射器HandlerMapping、处理器适配器HandlerAdapter等都是由框架提供。

spring主要的作用?

       Spring框架是为了解决企业应用开发的复杂性而创建的。

       Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。

       æ‰©å±•èµ„æ–™

       ä¼˜ç‚¹

       1、JAVAEE应该更加容易使用。

       2、面向对象的设计比任何实现技术(比如JAVAEE)都重要。

       3、面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度)

       4、代码应该易于测试。Spring框架会帮助你,使代码的测试判衡更加简单。

       5、JavaBean提供了应用程序配置的最好方法。

       6、在Java中,已检查异常(Checkedexception)被过度使用。框架不应该迫使你捕拍碧获不掘贺做能恢复的异常。

       å‚考资料来源:百度百科-spring框架

CKEditor5 + SpringBoot实战(五):SpringBoot整合Freemarker

       在Spring Boot整合CKEditor编辑器的实战系列文章中,我们将探讨如何在Spring Boot应用中使用CKEditor编辑器,涵盖基本环境搭建、文件上传、数据持久化、CKEditor5安装、与视频插入、内容获取与设置等。

       本系列项目的源码已同步更新至码云与GitHub,您可选择任一平台下载。访问地址如下:

       通过Git命令行工具下载,执行如下命令:

       项目使用FreeMarker作为模板引擎,用于生成动态文本输出。FreeMarker基于Java开发,使用FTL模板语言编写,专注数据展示,不关注数据呈现。

       Maven依赖配置在pom.xml文件中完成,确保SpringBoot项目引入FreeMarker所需依赖。

       SpringBoot应用默认可直接使用FreeMarker,无需额外配置。若需自定义配置,如模板后缀与存放路径,参照官方文档操作。

       Spring MVC的ViewResolver接口用于视图解析,创建FreeMarkerViewResolver实例作为解析器,覆盖默认配置,如缓存关闭、模板前缀与后缀。

       配置FreeMarker模板路径,Spring Boot默认路径为"classpath:/templates/",额外添加自定义路径,确保模板文件查找有序。

       在“/templates/”目录下,使用FreeMarker创建HTML模板。当请求特定URL时,Spring将处理模板并输出数据,模板中通过表达式获取模型内容。

       编写HelloController处理请求,创建hello.html模板,输出“Hello CKEditor5”信息。启动应用,访问“http://localhost:/hello”,验证页面输出。

       本章总结了Spring Boot中集成FreeMarker的流程,介绍了其基本使用与配置。欲了解更多功能与信息,访问FreeMarker官网。下章将详细介绍CKEditor5的安装与初始化。

       如需转载,请注明文章作者及出处,未经许可,请勿擅自转载。

相关栏目:综合