首页 文章 精选 留言 我的

精选列表

搜索[Solon框架],共10000篇文章
优秀的个人博客,低调大师

Android Router路由框架使用

Router项目地址 1. 添加依赖 android { defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments = ["moduleName": project.name] } } } } dependencies { implementation 'com.chenenyu.router:router:1.4.0-beta1' annotationProcessor 'com.chenenyu.router:compiler:1.4.0-beta1' } 2. Application中注册 public class App extends Application{ @Override public void onCreate() { super.onCreate(); Router.initialize(new Configuration.Builder() // 调试模式,开启后会打印log .setDebuggable(BuildConfig.DEBUG) // 注册模块名,每个Router使用的Module都要在这里注册 .registerModules("module1", "module2", "app") .build()); } } 3. 跳转URI /** * uri 可填写网页链接 * 1. http://www.baidu.com/ * 2. 动态添加路由中map集合中的键 */ Router.build(uri).callback(new RouteCallback() { @Override public void callback(RouteResult state, Uri uri, String message) { if (state == RouteResult.SUCCEED) { Toast.makeText(MainActivity.this, "succeed: " + uri.toString(), Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "error: " + uri + ", " + message, Toast.LENGTH_SHORT).show(); } } }).go(this); 4. 动态添加路由 // 添加动态路由 Router.handleRouteTable(new RouteTable() { @Override public void handle(Map<String, Class<?>> map) { map.put("dynamic", DynamicActivity.class); } }); 5. 表过滤器与目标过滤器 Router.handleInterceptorTable(new InterceptorTable() { @Override public void handle(Map<String, Class<? extends RouteInterceptor>> map) { Log.e(TAG, "handle: " + map.toString()); } }); Router.handleTargetInterceptors(new TargetInterceptors() { @Override public void handle(Map<Class<?>, String[]> map) { Log.e(TAG, "handle: " + map.toString()); } }); 6. 跳转路由 Router.build("dynamic").go(this); 7. 注解注册 // 注解注册 @Route("result") public class ForResultActivity extends AppCompatActivity {} // 使用Bundle传递数据 Router.build("result").requestCode(0).with("extra", "Bundle From Module1Activity").go(this); 8. 自定义过滤器 // 1. 自定义过滤器 @Interceptor("SampleInterceptor") public class SampleInterceptor implements RouteInterceptor { @Override public boolean intercept(Context context, RouteRequest routeRequest) { Toast.makeText(context, String.format("Intercepted: {uri: %s, interceptor: %s}", routeRequest.getUri().toString(), SampleInterceptor.class.getName()), Toast.LENGTH_SHORT).show(); return true; } } // 2. 使用 @Route(value = "intercepted", interceptors = "SampleInterceptor") public class InterceptedActivity extends AppCompatActivity {} // 3. 添加过滤器 Router.build("test").addInterceptors("SampleInterceptor").go(this); // 4. 跳过过滤器Router.build("intercepted").skipInterceptors("SampleInterceptor").go(this); 9. 协议过滤 // 1. AndroidManifest.xml文件配置 <activity android:name=".SchemeFilterActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="filter" android:scheme="router" /> </intent-filter> </activity> // 2. 协议过滤 public class SchemeFilterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scheme_filter); Uri uri = getIntent().getData(); if (null != uri) { Toast.makeText(this, "uri: " + uri.toString(), Toast.LENGTH_SHORT).show(); if (!uri.toString().startsWith("router://filter")) { Router.build(uri).go(this); } finish(); } } } // 3. 使用 Router.build("router://filter").go(this);

优秀的个人博客,低调大师

java安全框架shiro(一)

第一个简单的案例 ,通过读取.ini文件的方式模拟登陆, 1.通过Factory工厂的getInstance()方法来获取SecurityManager的实例,实例化Factory需要一个ini文件的路径作为参数; 2.将上面获取的实例set到 SecurityUtils这个类里,SecurityUtils类有一个get方法来获取Subject类 3.Subject这个类就是用来登陆和退出的,但是需要一个AuthenticationToken实例作为参数 上面是步骤,下面就来一步一步的介绍,最后会在最下面给出代码 第二步我就不说了,方法是静态的,直接类名调用就好了; 现在来到第三步,现在应该是得到subjiect的实例了,需要登录,但是需要一个token实例 现在token也有了,然后我们进行登录; 这里给出一个.ini文件的基本示例,把这个文件所在的路径填入第一步实例化工厂时的参数里即可 最后给出简单案例的代码 package com; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory; /** * 测试shiro第一个案例 * */ public class App { public static void main( String[] args ) { { /*实例化工厂*/ Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); /*获取实例*/ SecurityManager instance = factory.getInstance(); /*设置参数*/ SecurityUtils.setSecurityManager(instance); /*获取登录实例*/ Subject subject = SecurityUtils.getSubject(); /*实例化token,传入登录的用户和密码*/ AuthenticationToken token = new UsernamePasswordToken("admin1", "admin"); try { /*进行登录*/ subject.login(token); /*退出登录*/ subject.logout(); }catch (Exception e){ System.out.println("登录错误!!"); } } } } maven中添加的依赖 <dependencies> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-aspectj</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> </dependencies>

优秀的个人博客,低调大师

Android--项目框架介绍

公司最近要开发一款Android平台下的应用,通讯软件,所以年后上班一直在研究Android方面的内容。 使用Eclipse开发的Android,对于一个新建的Android项目,自动生成的项目结构如下图: 自动生成的目录介绍: src目录:主要是存放编写的Java代码。 assets目录:资源目录。 res目录:存放图片、布局文件、字符串、菜单等文件。 bin目录:输出文件夹,如生成的APK文件。 project.properties:工程属性文件配置。 gen目录:系统自动生成的代码目录,存放R.java. 这个R.java文件是系统自动生成的文件,非常的重要。这个R.java默认有attr、drawable、layout、string等4个静态内部类,每个类对应一种资源。例如在工程中添加一幅图片,那么工程就会在此类的drawable内部类中添加一条数据,如果删除了此图片,工程则会自动删除此条数据。 在res资源文件夹下包含有以下的文件: Drawable存放工程图片的信息,默认png格式的图片。 Layout存放工程的布局文件以.xml结束。 Values文件夹下存放一个很重要的string.xml,此文件夹存放的是自定义的字符串和数值。 除了这个文件之外,还可以定义arrays.xml(用来定义数组)、color.xml(用来定义颜色和颜色字符串数值)、dimens.xml(用来定义尺寸数值)、styles.xml(用来定义样式)。这些文件只是为了区分资源的类型,一种开发规范,便于开发人员识别修改,其实可以全部定义在string.xml文件中,均可以自动生成到R.java,便于使用。 资源文件分别的格式: 数组: <string-array name="city"> <item >北京</item> <item >上海</item> </string-array> 颜色,使用二进制的RGB值表示: <color name="bgcolor">#FFCCFF</color> 尺寸: <dimen name="width">20dp</dimen> 样式: <sytle name="customText"> <item name="android:textSize">20sp</item> </sytle> 在安卓的activity中,均有一个全局的方法,getResource()来获取资源,具体资源的获取方法如下: 文件 取值方式 String.xml getResource().getString(resourceId)、getResource().getText(resourceId) Arrays.xml getResource().getStringArray(resourceId) colors.xml getResource().getDarwable(resourceId)、getResource().getColor(resourceId) Dimens.xml getResource().getDimension(resourceId) Styles.xml 不需要取值 AndroidManifest.xml文件介绍 AndroidManifest.xml是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities、services等等),他们各自的实现类,各种能被处理的数据和启动位置。能声明程序中的Activity、ContentProviders、ServersIntent Receivers、permissions和instrumentation(安全控制和测试)。 示例: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="bgxt.demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".SimpleActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 其中manifest节点中的一些属性,介绍: Packgae:包,表示整个java应用程序的主要包名,而且是一个默认的程序名称。 Android:versionCode:表示该工程说生产的apk的版本号,1开始,逐渐递增。 Android:versionName:表示版本的一个名称。类似于:1.0、2.0. Android:installLoacation:自动寻找安装的地方,ROM或者SDCard,默认属性为自动。可选属性有auto:系统默认、internalOnly:仅仅只能安装在ROM上、preferExternal:会直接安装在sdcard上。 Application节点的一些属性介绍: Android:icon:表示应用程序的图标,Logo图片。 Android:label:表示应用的工程文字说明。 Activity节点的属性介绍: Android:name:表示整个应用程序的主程序的名称。 Intent-filter :意图过滤器,用来过滤用户的一些动作和操作。 本文转自承香墨影博客园博客,原文链接:http://www.cnblogs.com/plokmju/archive/2013/03/07/2949041.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Docker基础概念与框架

什么是容器? 一种虚拟化方案 操作系统级别的虚拟化 只能运行相同或相似内核的操作系统 依赖于Linux内核特性:NameSpace和CGroups(Control Group) Docker的目标: 提供简单轻量的建模方式 职责的逻辑分离 快速高效的开发生命周期 鼓励使用面向服务的架构 Docker的使用场景: 使用Docker容器开发、测试、部署服务 创建隔离的运行环境 搭建测试环境 构建多用户的平台即服务(PaaS)基础设施 提供软件即服务(SaaS)应用程序 高性能、超大规模的宿主机部署 Docker的基本组成: Docker Client客户端 Docker Daemon守护进程 Docker Image镜像 Docker Container容器 Docker Registry仓库 Docker是C/S的架构,Docker的客户端向Docker的守护进程发出请求,守护进程处理完所有的工作并返回结果。Docker容器的创建运行基于Docker的镜像。Docker镜像是一个层叠的只读文件系统,最底层是一个引导系统bootfs,当一个容器启动后,这个容器将会被移动到内存中,而引导文件系统会被卸载。Docker镜像的第二层是rootfs,位于bootfs之上。rootfs可以是一种或多种文件系统,在传统的Linux中,rootfs将会以只读文件系统进行加载,当引导结束并且完成了完整性检查后,才会被切换为读写模式,但是Docker中rootfs永远是只读文件系统的状态,并且Docker使用联合加载技术在rootfs之上加载更多的只读文件系统,在外部称为一个完整的系统。Docker将这样的文件系统称为镜像。Docker的容器启动的时候将会在镜像的最顶层加载一个可读写的文件系统,在Docker中执行的程序就是在这个可写层执行的。当Docker容器启动后,这个可写层是空的,当需要修改文件系统的文件的时候,Docker将会把这个文件复制到可写层,这个可写层的文件副本将会隐藏只读层的对应的文件,这就叫做Docker写时复制。Docker使用仓库来保存用户构建的镜像,仓库分为公有仓库和私有仓库两种,Docker自己提供的Docker公有仓库叫做Docker Hub。 Docker容器的相关技术: Docker依赖的Linux内核特性 (1)Namespaces命名空间: 编程语言中的命名空间是为了实现更好的封装,也就是代码隔离。 操作系统的命名空间是实现了系统资源的隔离,例如:进程、网络、文件系统。Linux内核实现命名空间的最主要的原因之一就是为了实现轻量级的虚拟化功能。 Docker使用了五种命名空间: PID(Process ID) 进程隔离 NET(Network) 网络接口管理 IPC(InterProcess Communication) 跨进程通信访问管理 MNT(Mount) 管理挂载点 UTS(Unix Timesharing System) 隔离内核和版本标识 这些隔离的资源使用CGroups进行管理。 (2)Controlgroups控制组: CGroups是Linux内核提供的可以限制、记录、隔离进程组所使用的物理资源的机制。由Google的工程师提出。在2004年整合进入Linux kernel 2.6.24。 CGroups提供的功能: 资源限制 优先级设定 资源计量 资源控制 CGroups赋予Docker的能力: 文件系统的隔离:每个Docker容器都有自己的rootfs 进程隔离:每个容器都运行在自己的进程环境中 网络隔离:容器间的虚拟接口和IP地址都是分开的 资源隔离和分组:使用CGroups将CPU和内存之类的资源独立分配给每个Docker容器。 本文转自 棋帅小七 51CTO博客,原文链接:http://blog.51cto.com/xvjunjie/1982394

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册