Spring框架及Bean详解
文章目录
Spring框架是什么?
Spring是分层的JavaSE/EE full-stack 轻量级开源框架,以IoC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)为内核,使用基本的JavaBean来完成以前只可能由EJB完成的工作,取代了EJB的臃肿、低效的开发模式。
为什么使用Spring框架?
7大优点 | 解释或优点的意义 |
---|---|
非侵入式设计的框架 | 使应用程序对框架依赖最小化 |
方便解耦、简化开发 | 对象的创建和依赖关系的维护交由Spring容器管理,降低组件之间的耦合性 |
支持AOP | 允许安全、事务、日志等通用任务集中式处理,提高程序复用性 |
支持声明式事务处理 | 配置即可完成事务管理,无需手动编程 |
方便程序测试 | 支持Junit4 |
方便集成各种优秀框架 | 不排斥优秀的开源框架 |
降低Java EE API的使用难度 | 提供了难用API的封装,如JDBC |
Spring体系结构
下面仅解析Core Container(核心容器)的部分模块,其他知识点自行找度娘吧!
模块名 | 解析 |
---|---|
Beans | 提供了BeanFactory,Spring将管理对象称为Bean(别误解为实体类) |
Core核心模块 | 提供了Spring框架的基本组成部分,包括IoC和DI功能 |
Context上下文模块 | 建立在Core和Beans模块的基础之上,它是访问定义和配置的任何对象的媒介。 |
怎么使用Spring框架?
Spring框架的主要功能是通过其核心容器实现的,Spring容器会负责控制程序之间的关系,而不是由程序代码直接控制。Spring为我们提供了两种核心容器,分别为BeanFactory和ApplicationContext。
- BeanFactory
其是基础类型的loC容器,提供了完整的loC服务支持。本质就是一个管理Bean的工厂,主要负责初始化各种Bean,并调用他们的生命周期。
如何装配Bean?
创建BeanFactory实例时,需要提供Spring所管理容器的详细配置信息,这些信息通常采用XML文件形式来管理,其加载配置信息的语法如下:
BeanFactory beanFactory = new XmlBeanFactory(new FileSystemResource("F: /applicationContext.xml"))
此种加载方式不常用,了解即可,不再赘述。
- ApplicationContext
ApplicationContext是BeanFactory的子接口,是另一种常用的Spring核心容器。它由org.springframework.context.ApplicationContext接口定义,不仅包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持。创建ApplicationContext接口实例,通常采用两种方法,具体如下:
1)通过ClassPathXmlApplicationContext创建
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation);
String configLocation:指定Spring配置文件的名称和位置。
ClassPathXmlApplicationContext会从类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。
2) 通过FileSystemXmlApplicationContext创建
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
- 在Java项目中,会通过ClassPathXmlApplicationContext类来实例化ApplicationContext容器。
- 重点来了:
在Web项目中,ApplicationContext容器的实例化工作会交由Web服务器来完成。
Web服务器实例化ApplicationContext容器时,通常会使用ContextLoaderListener来实现,此种方式只需要在web.xml中添加如下代码: 先指定Spring配置文件的位置,多个配置文件时,以逗号分隔。再指定以ContestLoaderListener方式启动Spring容器。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
程序示例
1.创建接口UserDao,然后在接口中定义一个say()方法。
public interface UserDao {
public void say();
}
2.创建UserDao接口的实现类UserDaoImpl,该类需要实现接口中的say()方法,并在方法中编写一条输出语句。
public class UserDaoImpl implements UserDao {
public void say() {
System.out.println("userDao say hello World !");
}
}
3.创建Spring的配置文件applicationContext.xml,并在配置文件中创建一个id为userDao的Bean。
<?xml version="1.0" encoding="UTF-8"?>
<