一、什麼是spring?前端
Spring 是個java企業級應用的開源開發框架,Spring適用於任何Java應用,Spring 框架經過POJO爲基礎的編程模型簡化Java應用的開發。java
二、Spring框架的優勢是什麼?web
三、什麼是IOC ?spring
Ioc—Inversion of Control,即「控制反轉」,不是什麼技術,而是一種設計思想。Spring IOC 容器 負責建立對象,管理對象(經過依賴注入(DI),裝配對象,配置對象,而且管理這些對象的整個生命週期,實現了鬆耦合。數據庫
四、Spring框架中的工廠編程
1.ApplicationContext接口後端
public static void main(String[] args) {
// 使用Spring的工廠:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 經過工廠得到類:
MyController myController = (MyController) applicationContext.getBean("userController");
myController.test();
}
複製代碼
2.BeanFactory工廠(是Spring框架早期的建立Bean對象的工廠接口) 使用BeanFactory接口也能夠獲取到Bean對象bash
public static void main(String[] args) {
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
MyService myService = (MyService) factory.getBean("userService");
myService.showTest();
}
複製代碼
BeanFactory和ApplicationContext的區別服務器
BeanFactory--BeanFactory採起延遲加載,第一次getBean時纔會初始化Bean架構
ApplicationContext--在加載applicationContext.xml時候就會建立具體的Bean對象的實例,還提供了一些其餘的功能
3.實現接口ApplicationContextAware 實現該接口的setApplicationContext(ApplicationContext context)方法,並保存ApplicationContext 對象。Spring初始化時,會經過該方法將ApplicationContext對象注入。
如下是實現ApplicationContextAware接口方式的代碼,前面兩種方法相似:
public class SpringContextUtil implements ApplicationContextAware {
// Spring應用上下文環境
private static ApplicationContext applicationContext;
/**
* 實現ApplicationContextAware接口的回調方法,設置上下文環境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 獲取對象
*
* @param name
* @return Object
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
}
複製代碼
雖然,spring提供的後三種方法能夠實如今普通的類中繼承或實現相應的類或接口來獲取spring 的ApplicationContext對象,可是在使用是必定要注意實現了這些類或接口的普通java類必定要在Spring 的配置文件applicationContext.xml文件中進行配置。不然獲取的ApplicationContext對象將爲null。
4.經過Spring提供的ContextLoader
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);
複製代碼
最後提供一種不依賴於servlet,不須要注入的方式。可是須要注意一點,在服務器啓動時,Spring容器初始化時,不能經過如下方法獲取Spring 容器,細節能夠查看spring源碼org.springframework.web.context.ContextLoader。
事件傳遞 Bean自動裝配 各類不一樣應用層的Context實現
五、SpringMvc架構
架構流程
6.Spring 架構
核心容器(Spring core)
核心容器提供Spring框架的基本功能。Spring以bean的方式組織和管理Java應用中的各個組件及其關係。Spring使用BeanFactory來產生和管理Bean,它是工廠模式的實現。BeanFactory使用控制反轉(IoC)模式將應用的配置和依賴性規範與實際的應用程序代碼分開。BeanFactory使用依賴注入的方式提供給組件依賴。
Spring上下文(Spring context)
Spring上下文是一個配置文件,向Spring框架提供上下文信息。Spring上下文包括企業服務,如JNDI、EJB、電子郵件、國際化、校驗和調度功能。
Spring面向切面編程(Spring AOP)
經過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring框架中。因此,能夠很容易地使 Spring框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。
Spring DAO模塊
DAO模式主要目的是將持久層相關問題與通常的的業務規則和工做流隔離開來。Spring 中的DAO提供一致的方式訪問數據庫,無論採用何種持久化技術,Spring都提供一直的編程模型。Spring還對不一樣的持久層技術提供一致的DAO方式的異常層次結構。
Spring ORM模塊
Spring 與全部的主要的ORM映射框架都集成的很好,包括Hibernate、JDO實現、TopLink和IBatis SQL Map等。Spring爲全部的這些框架提供了模板之類的輔助類,達成了一致的編程風格。
Spring Web模塊
Web上下文模塊創建在應用程序上下文模塊之上,爲基於Web的應用程序提供了上下文。Web層使用Web層框架,可選的,能夠是Spring本身的MVC框架,或者提供的Web框架,如Struts、Webwork、tapestry和jsf。
Spring MVC框架(Spring WebMVC)
MVC框架是一個全功能的構建Web應用程序的MVC實現。經過策略接口,MVC框架變成爲高度可配置的。Spring的MVC框架提供清晰的角色劃分:控制器、驗證器、命令對象、表單對象和模型對象、分發器、處理器映射和視圖解析器。Spring支持多種視圖技術。