Spring 学习--part1:
1.spring框架:
七个模块
[color=darkblue](1)核心容器:提供了spring框架的核心功能.BeanFactory是spring核心容器的主要组件.它通过控制反转将应用程序的配置和依赖性规范与实际的应用程序代码分开.这是整个spring的基础. [/color]
(2)Spring Context:通过配置文件,向Spring框架提供上下文信息.它构建在BeanFactory之上.另外增加了国际化/资源访问等功能.
(3)Spring AOP:Spring提供了面向方面编程的功能,因为Spring的核心是基于控制反转的,所以可以很容易地使Spring的依赖注入为AOP提供支持.
(4)Spring DAO:提供了一个简单而又有效的JDBC应用,使用它的DAO就足以应付开发人员的日常应用了.
(5)Spring ORM:Spring除了有自己的JDBC应用之外,还提供了对其它一些ORM框架的支持.
(6)Spring Web:提供了简化的处理多部分请求以及将请求参数绑定到域对象的任务.
(7)Spring MVC
详细说明可参见: http://guanjh.iteye.com/blog/123978
自己动手山寨一个spring框架: http://www.iteye.com/topic/413449
------- 之一: 控制反转&BeanFactory
1)控制反转
(英文缩写为IoC),也叫做依赖注入(Dependency Injection),简称DI。
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取它所依赖的对象的引用。
Martin Fowler 將 IoC 分成三類。
Type 1 : 基於interface (interface injection)。Depending object 需要實作(implement) 特定 interface 以供框架注入所需物件。
Type 2 : 基於setter (setter injection)。Depending object 需要實現特定 setter 方法 (但不需要依賴特定interface),
Type 3 : 基於constructor (constructor injection)
2)BeanFactory与ApplicationConText比较
使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class XmlConfigWithBeanFactory {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
"build/beans.xml"));
}
}
使用ApplicationConText从xml配置文件加载bean:
public class XmlConfigWithApplication{
public static void main(String[] args){
ApplicationContext application = new ClassPathXmlApplicationContext(beans.xml"));
application.getBean("BeanName");
}
}
ApplicationContext和BeanFacotry相比,提供了更多的扩展功能,但其主要区别在于后者是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext.
3) 实例化Bean的过程
当从BeanFactory中通过getBean()方法获取一个bean的时候,BeanFactory会经过如下的步骤来构建Bean的实例,这正是实例化Bean的过程:
1、调用Bean的默认构造方法,或者在指定的构造方法,生成bean实例(暂称为instance1);
3、如果Bean的配置文件中注入了Bean属性值,则在instance1基础上进行属性注入形成instance2,这种注入是覆盖性的。
2、如果Bean实现了InitializingBean接口,则调用afterPropertiesSet()方法,来改变或操作instance2,得到instance3;
4、如果Bean的配置文件中指定了init-method="init"属性,则会调用指定的初始化方法,则在instance3的基础上调用初始化方法init(),将对象最终初始化为instance4;当然,这个初始化的名字是任意的。
4) 加载spring配置文件的常用三种方法
1方法(web.xml)——————当前项目使用该方法
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
<!--Spring Context loader-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
----------
2方法(web.xml)
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
-----------
3方法在(struts-config.xml)中加载
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml,
/WEB-INF/action-servlet.xml"/>
</plug-in>
1.spring框架:
七个模块
[color=darkblue](1)核心容器:提供了spring框架的核心功能.BeanFactory是spring核心容器的主要组件.它通过控制反转将应用程序的配置和依赖性规范与实际的应用程序代码分开.这是整个spring的基础. [/color]
(2)Spring Context:通过配置文件,向Spring框架提供上下文信息.它构建在BeanFactory之上.另外增加了国际化/资源访问等功能.
(3)Spring AOP:Spring提供了面向方面编程的功能,因为Spring的核心是基于控制反转的,所以可以很容易地使Spring的依赖注入为AOP提供支持.
(4)Spring DAO:提供了一个简单而又有效的JDBC应用,使用它的DAO就足以应付开发人员的日常应用了.
(5)Spring ORM:Spring除了有自己的JDBC应用之外,还提供了对其它一些ORM框架的支持.
(6)Spring Web:提供了简化的处理多部分请求以及将请求参数绑定到域对象的任务.
(7)Spring MVC
详细说明可参见: http://guanjh.iteye.com/blog/123978
自己动手山寨一个spring框架: http://www.iteye.com/topic/413449
------- 之一: 控制反转&BeanFactory
1)控制反转
(英文缩写为IoC),也叫做依赖注入(Dependency Injection),简称DI。
应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取它所依赖的对象的引用。
Martin Fowler 將 IoC 分成三類。
Type 1 : 基於interface (interface injection)。Depending object 需要實作(implement) 特定 interface 以供框架注入所需物件。
Type 2 : 基於setter (setter injection)。Depending object 需要實現特定 setter 方法 (但不需要依賴特定interface),
Type 3 : 基於constructor (constructor injection)
2)BeanFactory与ApplicationConText比较
使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class XmlConfigWithBeanFactory {
public static void main(String[] args) {
XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource(
"build/beans.xml"));
}
}
使用ApplicationConText从xml配置文件加载bean:
public class XmlConfigWithApplication{
public static void main(String[] args){
ApplicationContext application = new ClassPathXmlApplicationContext(beans.xml"));
application.getBean("BeanName");
}
}
ApplicationContext和BeanFacotry相比,提供了更多的扩展功能,但其主要区别在于后者是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext.
3) 实例化Bean的过程
当从BeanFactory中通过getBean()方法获取一个bean的时候,BeanFactory会经过如下的步骤来构建Bean的实例,这正是实例化Bean的过程:
1、调用Bean的默认构造方法,或者在指定的构造方法,生成bean实例(暂称为instance1);
3、如果Bean的配置文件中注入了Bean属性值,则在instance1基础上进行属性注入形成instance2,这种注入是覆盖性的。
2、如果Bean实现了InitializingBean接口,则调用afterPropertiesSet()方法,来改变或操作instance2,得到instance3;
4、如果Bean的配置文件中指定了init-method="init"属性,则会调用指定的初始化方法,则在instance3的基础上调用初始化方法init(),将对象最终初始化为instance4;当然,这个初始化的名字是任意的。
4) 加载spring配置文件的常用三种方法
1方法(web.xml)——————当前项目使用该方法
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
<!--Spring Context loader-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
----------
2方法(web.xml)
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
-----------
3方法在(struts-config.xml)中加载
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml,
/WEB-INF/action-servlet.xml"/>
</plug-in>