標籤: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容器的整合