我的dreamvc框架最终写得差点儿相同了,借鉴了非常多开源框架,SpringMVC、Struts2等,眼下放在github上面。地址请猛戳我

写得差点儿相同了,是要写一个总结,把自己当时的思路记录下来!还有很多其它的工作要做!

(一)

首先,IOC容器作为管理bean的重要工具,我们在日常的开发其中经经常使用到,最经常使用的就属SPRINGIOC了吧!当然,假设开发人员不原理是用SPRINGIOC。那么你能够实现自己的容器,或者是用其它的3方ioc工具。仅仅要实现dreamvc提供的IocFactory或者继承AbstractIocFactory。请看以下这个接口

package org.majorxie.dreamvc.ioc.factory;

import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext; /**
*IOC 容器 工厂接口
*
* @author xiezhaodong(majorxie@139.com)
*2014-10-24
*/
public interface IocFactory {
/**
* 载入容器
* @param config
*/
void init(ServletContext context); /**
* destory ioc
*/
void destroy(); /**
* 得到全部的controller对象
* @return
*/
List<Object> getControllers()throws Exception; /**
* 是否是拦截器
* @return
*/
List<Object> getInterceptors(); /**
* 得到其它对象
* @return
*/
List<Object> getOthers(); }

package org.majorxie.dreamvc.ioc.factory;

import java.util.List;

/**
* 假设是Spring容器就让他自己destory,其它的能够继承该类覆盖此方法
* 假设想要扩展ioc,则能够选择使用extends还是implements
* @author xiezhaodong
*2014-10-25
*/
public abstract class AbstractIocFactory implements IocFactory {
/**
* 默认实现为空
*/
public void destroy() { } public List<Object> getOthers() { return null;
} }

开发人员依照接口定义内容。封装好自己的controller和Interceptor。然后在web.xml里面配置实现类的路径即可了。dreamvc已经默认的实现了springioc。请看实现类

package org.majorxie.dreamvc.ioc.factory;

import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletContext; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.majorxie.dreamvc.exception.NotHaveControllerException;
import org.majorxie.dreamvc.interceptor.Interceptor;
import org.majorxie.dreamvc.tag.Controller;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils; /**
* Spring容器的实现,我们让spring去destory所以继承的abstract
*
* @author xiezhaodong 2014-10-25 01:34
*
*/
public class SpringIocFactory extends AbstractIocFactory {
private final Log log = LogFactory.getLog(SpringIocFactory.class); private ApplicationContext applicationContext;
private List<Object> controllerBeans = new ArrayList<Object>();
private List<Object> otherBeans = new ArrayList<Object>();
private List<Object> interceptorBeans = new ArrayList<Object>(); public void init(ServletContext context) {
log.info("init context...");
applicationContext = WebApplicationContextUtils
.getRequiredWebApplicationContext(context);
initBeans();
} public List<Object> getControllers() throws NotHaveControllerException { if (controllerBeans.size() == 0) {
throw new NotHaveControllerException("you need at least one controller ");
} else {
return controllerBeans;
}
} public List<Object> getInterceptors() {
return interceptorBeans;
} /**
* 假设是Interceptor或者controller类。或者有着两个的注解都算是该类的类
* 遍历全部的bean装载到list
*
*/
@SuppressWarnings("unchecked")
private void initBeans() {
String[] beanNames = applicationContext.getBeanDefinitionNames();
for (String beanName : beanNames) {
if (applicationContext.getBean(beanName) instanceof Interceptor/*||applicationContext.getType(beanName).isAnnotationPresent(org.majorxie.dreamvc.annotation.Interceptor.class)==true*/) {
// applicationContext.getBean(beanName, Interceptor.class);
interceptorBeans.add(applicationContext.getBean(beanName));
log.info("init interceptor..");
} else if (applicationContext.getBean(beanName) instanceof Controller||applicationContext.getType(beanName).isAnnotationPresent(org.majorxie.dreamvc.annotation.Controller.class)==true) {
controllerBeans.add(applicationContext.getBean(beanName));
log.info("init controller....");
} else {
otherBeans.add(applicationContext.getBean(beanName));
log.info("init others...");
} } } @Override
public List<Object> getOthers() { return otherBeans;
} }

配置web.xml载入參数

 <init-param>
<param-name>container</param-name>
<param-value>org.majorxie.dreamvc.ioc.factory.SpringIocFactory</param-value>
</init-param>

ok,我们的ioc集成已经完毕了,如今就能够在application.xml配置了

<span style="white-space:pre">	</span><bean id="test" class="test.ConTest"></bean>
<bean id="inter2" class="test.Interceptor_02"></bean>
<bean id="inter" class="test.LoginInterceptor"></bean>

下一篇,会解说dreamvc的机制~~么么哒

转载请注明出处http://blog.csdn.net/a837199685

dreamvc框架(一)ioc容器的集成的更多相关文章

  1. Spring框架及IOC容器

    Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发.Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少 ...

  2. Spring框架 之IOC容器 和AOP详解

    主要分析点: 一.Spring开源框架的简介  二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置  一.S ...

  3. 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入

    前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...

  4. 基于nutz框架理解Ioc容器

    同样我们从问题入手去验证以及去理解Ioc容器都做了哪些事情: 1.nutz是有几种方式获取需要容器管理bean的信息? 第一种是使用json格式的文件进行配置,如: 第二种:使用注解@IocBean ...

  5. Spring框架学习[IoC容器高级特性]

    1.通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位.读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取 ...

  6. ASP.NET Web API 框架研究 IoC容器 DependencyResolver

    一.概念 1.IoC(Inversion of Control),控制反转 即将依赖对象的创建和维护交给一个外部容器来负责,而不是应用本身.如,在类型A中需要使用类型B的实例,而B的实例的创建不是由A ...

  7. spring-framework-中文文档一:IoC容器、介绍Spring IoC容器和bean

    5. IoC容器 5.1介绍Spring IoC容器和bean 5.2容器概述 本章介绍Spring Framework实现控制反转(IoC)[1]原理.IoC也被称为依赖注入(DI).它是一个过程, ...

  8. Spring IoC容器总结(未完)

    在面向对象系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上.这些依赖关系可以通过把对象的依赖注入交给框架或IOC容器来完成,这种从具体对象手中交出控制的做法是非常有价 ...

  9. Spring IOC容器的实现原理

    1 概述 1.1 依赖反转模式 在Java中,一个复杂的功能一般都需要由两个或者两个以上的类通过彼此合作来实现业务逻辑的,这使得每个对象都需要与其合作的对象的引用.如果这个获取依赖对象的过程需要自己去 ...

随机推荐

  1. jquery学习之旅

    在jQuery中,css()方法的功能是设置或获取元素的某项样式属性. $<"div">.css("font-weight","bold& ...

  2. about Red_Hat_Enterprise_Linux_7

    systemd systemd 是 Linux 的系统和服务管理程序,替换了 Red Hat Enterprise Linux 之前的发行本中使用的 SysV.systemd 与 SysV 和 Lin ...

  3. c++构造函数谁先执行的问题

    看到网上一哥们的帖子 http://blog.csdn.net/maray/article/details/7761709 东西不多就转发了 1 #include <iostream> u ...

  4. ios 复制黏贴板的使用

    在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享.比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容. 一.在iOS中下面三个控件, ...

  5. Centos + nginx + JBOSS AS 7 搭建Java web application

    最近做了一个Java的web app,一直想在Centos环境中搭建一个完整的web服务器,现在开始动手. 先说说环境: 操作系统: Centos 6.3 WEB服务器: nginx-1.2.5 Ap ...

  6. PS证件照换背景

    综述 博主原创内容. 在PS里,对于抠图,比较有技术含量的便是抠头发丝了,下面为大家带来一个比较详细的抠头发丝的教程. 素材准备 在这里我们用这张图片作为抠图素材,下面让我们一步步来演示抠图的过程,并 ...

  7. Multilingual App Toolkit v2.2 release

    Multilingual App Toolkit v2.2 release Today we released Multilingual App Toolkit v2.2. This release ...

  8. MyEclipse10

    1.配置tomcat Windows->Preferences->My Eclipse->Servers->Tomcat,对于64位操作系统而言,Tomcat home dir ...

  9. 构建微服务:Spring boot

    构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...

  10. Quartz1.8.5例子(九)

    /* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...