Spring 功能与结构
基于Java Beans的配置管理,采用IOC的原理,特别是对依赖注入技术的使用。这些都用来减少各组件间对实施细则的相互依赖性。
一个核心的,全局适用的Bean工厂。
一个一般抽象化的层面来管理数据库间的数据处理。
建立在框架内的,对Java数据处理API和单独的JDBC数据源的一般性策略。因此,在数据处理支持上对Java企业版本环境的依赖性得以消除。
和一些可持续性的框架,如Hibernate,JDO,MyBatis和db4o的整合。
Web应用中的MVC框架,基于核心的Spring功能,支持多种产生视图的技术,包括JSP,FreeMarker,Velocity,Tiles,iText,和POI。
大量的AOP框架以提供诸如数据处理管理的服务。同IOC的功能一样,目的是提高系统的模块化程度
Spring框架旨在分离体系结构的层次,由7个定义良好的模块组成,因此每一层都可以修改而不会影响到其它层。每一层都不知道其上层的关注点;就其可能而言,只对所紧挨的下一层有依赖。层与层之间的依赖通常是以接口的形式表现,以确保其耦合尽可能松散。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理Bean的方式。
参考:https://my.oschina.net/xianggao/blog/417983
Spring java 工程
定义Bean
package com.king.helloworld.bean;
public class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public void hello() {
System.out.println("Hello, " + name);
}
}
配置ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloWorld" class="com.king.helloworld.bean.HelloWorld">
<property name="name" value="Tao Bangren"/>
</bean>
</beans>
运行Main
public class Main {
public static void main (String [] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-bean.xml");
HelloWorld helloWorld = (HelloWorld) context.getBean("helloWorld");
helloWorld.hello();
}
}
SpringMVC 在WEB容器中的启动过程与web.xml配置解析
- web应用部署在web容器中,web容器(如tomcat)提供其一个全局的上下文环境,这个上下文就是 ServletContext,其为后面的spring IoC容器提供宿主环境;
- 在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,该接口类实际的实现类是XmlWebApplicationContext,即spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。在此IoC容器初始化完毕后,spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取;
//**************************************************************
//实现ServletListener接口的类初始化方法中接收到通知事件
//**************************************************************
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
this.contextLoader.initWebApplicationContext(event.getServletContext());
}
protected ContextLoader