spring介绍
spring框架是j2EE企业级应用的轻量级的开源框架。是以IOC控制反转、AOP面向切面编程为核心;提供了表现层springmvc和持久层spring JDBC,以及业务层的事务管理等企业级应用解决方案;还能实现将开源世界中众多优秀的第三方框架整合,成为越来越受欢迎的J2EE企业级应用框架。
spring框架优点
ioc解耦:通过spring提供的ioc容器,将对象间的依赖关系交给spring管理,避免程序间的过度耦合
aop面向切面编程:通过spring的AOP功能,方便实现面向切面编程,很多使用传统OOP编程不容易实现的业务功能,可以通过AOP轻松实现。比如事务管理,日志功能。
声明式事务管理:通过声明式方式灵活实现事务管理,提高开发效率和质量,将我们(程序员)从单调烦闷的事务管理代码中解脱出来
与第三方框架整合:spring框架降低了第三方框架的集成使用难度,提供了对各种框架(quartz、mybatis、springmvc等)的直接支持
Ioc:控制反转
谁控制谁,控制什么?
传统设计程序中,我们都是直接通过new来创建对象,是我们主动去创建依赖对象,现在IOC有一个专门的容器来创建这些对象,即ioc容器控制对象的创建,
为何是反转,哪些方面反转了?
在传统开发模式下,收拾我们自己去对象中获取依赖对象,正转,现在有ioc容器后,由ioc创建并注入依赖对象,这就是反转, 依赖对象的获取被反转了Ioc:控制反转
谁控制谁,控制什么?
传统设计程序中,我们都是直接通过new来创建对象,是我们主动去创建依赖对象,现在IOC有一个专门的容器来创建这些对象,即ioc容器控制对象的创建,
为何是反转,哪些方面反转了?
在传统开发模式下,收拾我们自己去对象中获取依赖对象,正转,现在有ioc容器后,由ioc创建并注入依赖对象,这就是反转, 依赖对象的获取被反转了
使用spring框架提供的IOC容器,获取对象:
1.spring框架提供了一个大工厂接口:ApplicationContext
2.该工厂接口中提供了一个getBean()方法,用于根据bean的名称获取bean
3.该工厂接口提供了常见的实现类:
3.1.ClassPathXmlApplicationContext
:
从类路径下加载bean.xml配置文件,创建spring的ioc容器。在实际项目中使用最多
3.2.FileSystemXmlApplicationContext
:
从文件系统路径下加载bean.xml配置文件,创建spring的ioc容器。在实际项目中几乎不用
搭建spring IOC环境
pom.xml
<properties>
<!-- spring版本 -->
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<!--依赖包-->
<dependencies>
<!--spring ioc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
配置bean.xml
<!--配置service-->
<bean id="customerService" class="com.xt.service.impl.CustomerServiceImpl"></bean>
<!--配置dao-->
<bean id="customerDao" class="com.xt.dao.impl.CustomerDaoImpl"></bean>
编写表现层
// 1.加载spring配置文件,创建spring ioc容器
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
// 2.从容器中获取客户service对象
CustomerService customerService = (CustomerService)context.getBean("customerService");
BeanFactory与ApplicationContext区别
1 BeanFactory
是顶层接口
2 ApplicationContext
是子接口
3 最大的区别就是常见对象的时间不一样
BeanFactory
是采用的延迟加载的思想,即什么时候使用对象,就什么时候创建对象
ApplicationContext
采用立即创建的思想,即一加载配置文件,就立即创建
基于注解配置IOC
配置bean.xml
<!--配置包扫描注解配置dao/service,说明:
第一步:导入context名称空间和约束
xmlns:context="http://www.springframework.org/schema/context
第二步:
通过<context:component-scan>标签配置包扫描。spring框架在创建IOC容器的时候,
会扫描指定的包,和它的子包
-->
<context:component-scan base-package="com.xt"></context:component-scan>
常用注解
创建对象相关的注解
@Component
作用:配置javaBean对象。相当于xml配置方式中的bean标签
属性:
value:给bean一个唯一标识名称
细节:
1.value属性可以省略
2.默认使用类的名称首字母小写,作为bean的名称
由@Component
演化的三个注解:
@Controller
: 一般用于表现层
@Service
:一般用于业务层
@Repository
:一般用于持久层
设置bean作用范围相关的注解
@Scope
作用:设置bean的作用范围。相当于xml配置方式中bean标签的scope属性
value:指定作用范围取值
属性取值:
singleton:单例。默认值
prototype:多例
request:web项目中,把bean对象存入request域中
session:web项目中,把bean对象存入session域中
globalsession:web项目中,把bean对象存入全局session域中
注入数据相关的注解:@Autowired、@Qualifier、@Resource、@Value
@Autowired
作用:默认按照bean的类型注入数据
属性:required:指定目标bean是否必须存在于spring的IOC容器(true必须存在;false:可以不存在;默认true)
注意:
1. 在spring容器中,如果同一个类型存在多个bean实例对象
2.则先按照bean的类型进行注入,再按照bean的名称进行匹配
3.匹配上注入成功;匹配不上注入失败
@Qualifier
作用:
与@Autowired注解一起使用,指定在按照bean类型注入的基础上,再按照bean的名称注入
属性:
value:指定bean的名称
注意:
1.在类的成员变量上,不能单独使用。需要与@Autowired注解一起使用
2.在方法的成员变量上,可以单独使用
@Resource
作用:
默认按照bean的名称注入数据
属性:
name:指定bean的名称注入数据
type:指定bean的类型注入数据
注意:
默认按照bean的名称匹配注入数据。如果注入失败,再按照bean的类型注入
@Value
作用:
给java简单类型成员变量注入数据
与bean的生命周期相关的注解:
@PostConstruct:
初始化操作,相当于xml配置方式中bean标签的init-method属性
@PreDestroy:
销毁操作,相当于xml配置方式中bean标签的destroy-method属性
*