- 浏览: 1780387 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
JAVA和PHP在动态加载类上有很大的不同,对于PHP来说,想要动态加载类只需,以下代码就可以实现,这个也可以简单实现为 一个单一入口的demo
MVC.php
index.php
控制器的实现例子
就可以在 index.php中通过ctl和act来实现动态页面的跳转,例如index.php?act=bbs
但是对于JAVA来讲,就相对麻烦一些,这里给出一个简单的动态加载类的demo,希望对大家有所帮助:
配置文件ioc.conf同这个类文件应该在同一目录中,可以自行更改上面的文件路径
MVC.php
class MVC{ var $cur_ctl ;//当前控制器 var $cur_act ;//当前action function MVC() { $this->cur_ctl = null ;$this->cur_act = null ; if (isset($_REQUEST['ctl']) && ! empty($_REQUEST['ctl'])) { $this->cur_ctl = $_REQUEST['ctl'] ; } if (isset($_REQUEST['act']) && ! empty($_REQUEST['act'])) { $this->cur_act = $_REQUEST['act'] ; } } function run() { $ctl_name = 'C_' ; //控制器前缀 $act_name = 'a_' ; //事件前缀 if (empty($this->cur_ctl)) $ctl_name = "{$ctl_name}Default" ; else $ctl_name = "{$ctl_name}{$this->cur_ctl}" ; if (empty($this->cur_act)) $act_name = "{$act_name}Index" ; else $act_name = "{$act_name}{$this->cur_act}" ; // exec this require "{$ctl_name}.php"; $ExecMVC = & new $ctl_name(); $ExecMVC->$act_name(); } }
index.php
require('MVC.php'); $mvc = & new MVC(); $mvc->run();
控制器的实现例子
class C_Default { function C_Default() { } function a_index() { echo 'suess' ; } function a_bbs() { echo 'bbs' ; } }
就可以在 index.php中通过ctl和act来实现动态页面的跳转,例如index.php?act=bbs
但是对于JAVA来讲,就相对麻烦一些,这里给出一个简单的动态加载类的demo,希望对大家有所帮助:
import java.util.Properties; import java.lang.ClassLoader ; import java.io.* ; /** * 读取JAVA资源配置文件中或命令参数中指定的接口实现类 */ public class MySimpleIoc { private ClassLoader myClassLoader ; private static MySimpleIoc ioc ; private Properties properties ;//配置文件 private MySimpleIoc() { myClassLoader = MySimpleIoc.class.getClassLoader() ; this.initConfFile() ; } public static MySimpleIoc getInstance() { if (ioc == null) ioc = new MySimpleIoc() ; return ioc ; } //加载指定的IOC配置文件./ioc.conf private void initConfFile() { try { // "/"表示以当前类的包的根路径为基准路径 InputStream in = MySimpleIoc.class.getResourceAsStream("./ioc.conf"); properties = new Properties(); properties.load(in); }catch(Exception e) { this.println ("IOC配置文件[./ioc.conf]读取失败,请检查") ; e.printStackTrace(); } } private void println(Object msg) { System.out.println (msg) ; } //clazz 是类名的全称在配置文件中对应的字符串 -- java.lang.String public Object getBean(String clazz){ Object implClass = null ; String implClassName = properties.getProperty(clazz) ; try { //这里可以扩展下,以防止出现空指针异常 使用一个缺省的测试类来做 implClass = this.myClassLoader.loadClass(implClassName).newInstance() ; } catch (ClassNotFoundException ex) { this.println ("Class: " + implClassName + "had not found : " + ex); ex.printStackTrace() ; } catch (InstantiationException ex) { this.println ("Class: " + implClassName + ".newInstance() reported InstantiationException : " + ex ); ex.printStackTrace() ; } catch (IllegalAccessException ex) { this.println ("Class: " + implClassName + "reported IllegalAccessException: " + ex); ex.printStackTrace() ; } return implClass ; } public static void main(String args[]) { I接口类型 iavs = null ; iavs = (I接口类型) MySimpleIoc.getInstance().getBean("配置文件中设置的接口实现类的标签名称"); System.out.println (iavs.toString() ) ; //这个是实现类的方法 System.out.println ("======================================") ; } }
配置文件ioc.conf同这个类文件应该在同一目录中,可以自行更改上面的文件路径
#要求类名的全称 -- eg. java.lang.String #attackerVarityServce attackerVarityService=vb2005xu.attacker.service.IAttackerVarityServce attackerVarityImpl=vb2005xu.attacker.service.impl.AttackerVarityImpl #attackerRecord attackerRecordService=vb2005xu.attacker.service.bo.AttackerRecord attackerRecordImpl=vb2005xu.attacker.dao.AttackerRecordImpl #attackerDBDao attackerDBDaoService=vb2005xu.attacker.dao.IAttackerDBDao attackerDBDaoImpl=vb2005xu.attacker.dao.db4o.AttackerDBDaoImpl
发表评论
-
前端截取url成图片
2017-11-09 18:16 1564有些小需求需要将 url 转成图片, 直接使用 ... -
excel-to-csv-inbrowser
2016-08-15 19:20 2901# excel-to-csv-inbrowser exce ... -
ws-http 最简单轻量的PHP CURL工具库
2016-07-29 20:44 2632欢迎大家拍砖 https://github.com/to ... -
常用的 js 代码梳理
2016-06-16 12:00 1929/** * 格式化时间函数 * @param {form ... -
Facade 包装类 -- 解决视图里面长长的命名空间调用问题
2016-04-20 10:48 1750有时候模版里面定义 ... -
搞一个简单的数据打印工具AsDebug の Laravel
2016-01-20 19:47 2997很多时候我们都要纠结于代码开发过程中的数据 dump 工作 ... -
ken\trade
2015-12-18 20:45 1557<?php namespace ken\tra ... -
我承认我手贱: 升级 xcode
2015-11-14 21:11 1893升级 xcode 之后, 在终端运行 git clone 出现 ... -
YII2 模块内自定义错误页
2015-11-07 12:17 5514当前YII框架中把错误异常配置都放置在 web.php 中, ... -
PHP单例模式面试注意事项
2015-10-20 09:57 1959最近面了不少PHP从业者,有实习生也有5/6年以上的开发者 ... -
NGINX 配置 SSL 证书 搭建 HTTPS 网站
2015-10-19 19:19 2921下面是详细的配置过程: 1、在服务器上使用 Open ... -
关于php cron任务管理的实现假想
2015-10-17 21:25 1906之前每开发一个计划任务功能均需要在线上操作crontab来新 ... -
fineuploader 跨子域上传文件 cookie丢失问题的解决
2015-10-14 13:30 4819目前的项目中,使用到了fineuploader 这个纯htm ... -
CentOS 6安全加固及性能优化
2015-07-27 14:54 4299CentOS 6安全加固及性能优化 我们可以通过调整 ... -
常见票据辨别真伪的方法
2015-04-28 09:07 17521、真伪鉴别图示和步 ... -
梳理面试中遇到的HTTP协议相关的问题和知识
2015-04-16 13:45 3948本文会是一个比较长的,持续更新的过程 当你在浏览器地 ... -
面试中遇到的期权问题
2015-04-13 14:33 2748最近在面试一直遇到 ... -
遭遇windows上PHP 不能打开GBK编码文件名的问题
2015-03-09 11:21 3160我在 目录下建了一个文件名为 謀定三國-i8ujlw.js ... -
遭遇jsonp同域下变作post请求的坑
2015-01-28 21:39 4767今天迁移一个站点时遇到一个坑爹问题,同一个jsonp接口在 ... -
nginx 400 错误请求分析
2015-01-27 15:01 3344在服务器上传文件过程中 nginx经常会出现 400 的错误 ...
相关推荐
Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...
在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...
在本文中,我们将深入探讨如何使用Spring的Inversion of Control(IoC)容器来实现一个具体的案例:控制打印机(Printer)类与不同类型的纸张(Paper)类的交互。Spring的IoC允许我们解耦组件,使代码更加灵活且易于...
2. 创建Bean的具体实现类。 3. 创建配置文件(如XML或基于注解的方式),定义Bean的ID、类名以及依赖关系。 4. 使用Spring的ApplicationContext或BeanFactory加载配置文件,创建IOC容器。 5. 通过容器的`getBean()`...
在这个“自己实现ioc实例demo”中,我们将探讨如何通过XPath解析XML文件来实现这一功能。 首先,让我们了解什么是依赖注入。在传统的编程中,一个类通常会自行创建它需要的对象,这导致了类与对象的紧密耦合。而在...
Spring框架-IoC实现CRUD
通过自己动手实现,初学者可以更好地理解Spring是如何在幕后管理对象和处理依赖的,这对于提升编程技能和设计模式的理解非常有益。同时,这也是软件开发中常用的一种学习方法——通过模仿和实践来深入理解复杂的概念...
依赖注入是IoC的一种具体实现方式,它允许对象在运行时动态地获得依赖。Spring支持三种类型的依赖注入: 1. **构造器注入**:通过构造函数传入依赖对象。 2. **设值注入**:使用setter方法注入依赖。 3. **接口注入...
**IOC容器简单实现** IOC(Inversion of Control)容器是软件设计模式中的一种,它将对象的创建和管理权从代码本身转移到一个外部容器,即IOC容器。这种反转控制使得程序更加灵活,降低了组件之间的耦合性,提高了...
这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...
【标题】"自己动手实现IOC和MVC源码"揭示了本文的核心内容,即通过实践来理解并构建IoC(Inversion of Control)和MVC(Model-View-Controller)这两种重要的软件设计模式的源代码。这两者是现代Java Web开发中...
在本Java练习中,我们将深入理解并实现Spring框架的核心组件——IoC(Inversion of Control,控制反转)容器。这个练习分为三个主要部分,旨在帮助我们掌握XML配置文件的读取,模拟Spring的IoC机制,以及对Struts...
IoC的一个常见实现是依赖注入(Dependency Injection,简称DI),它允许对象之间的依赖关系在运行时动态地被管理和配置,而不是由对象自己来创建或查找其依赖。 **设计用户持久化类** 设计用户持久化类通常涉及...
当我们自己动手实现IOC容器时,可以更深入地理解其内部的工作机制。 ### 1. IOC基本原理 **控制反转**的核心思想是将对象的创建和管理权交给容器,而不是由对象自身负责。这样,对象不再需要知道依赖的具体实现,...
1. JDK动态代理:JDK内置的java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口提供了实现动态代理的能力。当被代理的类实现了至少一个接口时,我们可以使用JDK动态代理来创建一个代理类,这个代理...
3. **编写类**:创建`BookService`接口,它的实现类`BookServiceImpl`,以及`BookDao`接口和其实现类`BookDaoImpl`。`BookServiceImpl`中通过实例化`BookDaoImpl`来完成对数据库的操作。 4. **配置Spring**:在`...
在这个项目中,“基于java简单模拟实现spring_ioc”显然是为了帮助开发者理解Spring的IoC容器是如何工作的,以及如何通过Java代码来模拟这个过程。 首先,让我们了解什么是Spring的IoC。IoC是一种设计模式,它将...
Java中有两种方式来实现动态代理,一种是使用JDK中的Proxy类,另一种是使用CGLIB库。使用JDK中的Proxy类,可以生成代理对象,并将其绑定到原始对象上。使用CGLIB库,可以生成代理对象,并将其绑定到原始对象上,同时...