初步认识了spring并学习了反转控制和依赖注入:
* Spring是什么:
Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但现在已经不止应用于企业应用。
是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架:
·· 从大小与开销两方面而言Spring都是轻量的。
·· 通过控制反转(IOC)的技术达到松耦合的目的。
·· 提供了面向鞋面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。
·· 包含并管理应用对象的配置和生命周期,这个意义上是一种容器。
·· 将简单的组件配置,组合成为复杂的应用,这个意义上是框架。
* Spring适用范围:
构建企业应用(SpringMVC+Spring+Hibernate/ibatis)。
单独使用Bean容器(Bean管理)。
单独使用AOP进行切面处理。
其他的Spring功能,如:对消息的支持等。
* 什么是IOC
IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是
由外部容器负责创建和维护
DI(依赖注入)是其一种实现方式
目的:创建对象并且组装对象之间的关系
* Bean容器初始化
基础:两个包
-- org.springframework.beans
-- org.springframework.context
-- BeanFactory提供配置结构和基本功能,加载并初始化Bean
-- ApplicationContext保存了Bean对象并在spring中被广泛使用
方式,ApplicationContext
-- 本地文件
-- Classpath
-- Web应用中依赖servlet或Listener
实现方式
-- 文件:
FileSystemXmlApplicationContext context =
new FileSystemXmlApplicationContext("xml文件路径");
-- Classpath
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("相对路径");
-- Web应用
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Spring框架中的DI的解释与使用
解释: Dependency Injection依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件。
使用:在beans.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/springbeans.xsd">
<!--配置一个bean[对象]-->
<bean id="userService" class="com.cyh.service.IUserServiceImpl">
<!--依赖注入数据-->
<property name="name" value="caiyuhao"></property>
</bean>
</beans>
BeanFactory和ApplicationContext对比
-
BeanFactory采取延迟加载,第一次getBean时才会初始化bean
-
ApplicationContext是及时加载,对BeanFactory扩展,提供了更多功能
-
国际化处理
-
事件传递
-
Bean自动装配
-
各种不同应用层的Context实现
-
Spring中的作用域:
类别 | 说明 |
---|---|
singleton | 在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值。 |
prototype | 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new XxxBean()。(可以理解成多例) |
request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境。 |
session | 同一个HTTP Session共享一个Bean,不同Session使用不同Bean,仅适用于WebApplicationContext环境。 |
globalSession | 一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境。 |
其中我们需要掌握前两个,一个是单例singleton,意思是每次创建bean对象,无论创建几个,都是同一个对象实例;
一个是多例prototype,意思是每次创建的都是不同的对象,不是同一个。