dreamvc架構(一)ioc容器的整合

來源:互聯網
上載者:User

標籤:java   架構   mvc   ioc   spring   

我的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([email protected]) *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..");} elseif (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...");}}}@Overridepublic 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容器的整合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.