Spring(一)---IOC思想
2018-02-09 12:13
246 查看
引言
当下最火的框架,莫不是Spring全家桶了,而Spring框架在业务层有两个非常重要的思想,IOC和AOP. 这边,我先记录下我对Spring框架IOC的一些理解.简单介绍
老规矩,看一下百度百科.其实说明白了 ,就是通过配置,将以前手动new对象的实例化过程,交给Spring 框架.当项目启动的时候,Spring框架中的,管理所有Bean的Spring容器会启动,帮我们自动初始化创建我们所需要的Bean,这边就称为IOC.当我们要调用对象的时候,直接注入即可.
**重点内容:**IOC底层其实就是反射!!!
IOC控制反转实现
一般分为两步:1.配置文件
我这边简单举例说明:
<?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"> <!-- 将dao交给spring管理 --> <bean id=userDao class="cn.ding.spring.UserDaoImpl"> </beans>
2.引用
DI依赖注入的实现
IoC:是一个大的思想,将某件事情(对象创建权利等)的控制前交给第三方管理。
DI:还是IoC的思想,将对象依赖注入权利交给第三方管理。
简单举例来说,就是Service通过IOC创建,而Service 里面的DAO 通过DI注入进去.
Spring工厂
ApplicationContext直译为应用上下文,是用来加载Spring框架配置文件,来构建Spring的工厂对象,它也称之为Spring容器的上下文对象,也称之为Spring的容器。ApplicationContext 只是BeanFactory(Bean工厂,Bean就是一个java对象) 一个子接口.
前面一直说我们把创建对象的权利交给了Spring工厂,那么Spring工厂又是什么呢?
这时候不禁想问,为什么不用BeanFactory直接操作呢?
其实ApplicationContext对BeanFactory做了一些扩展
事件传递
Bean自动装配
各种不同应用层的Context实现
Spring工厂的两种获取方式
如果applicationContext.xml 在 src下, ClassPathXmlApplication读取如果applicationContext.xml 在WEB-INF下,FileSystemXmlApplicationContext读取
IOC装配Bean—XML方式讲解
实例化bean有四种方式:1. 无参数构造器 (最常用)
2. 第二种 静态工厂方法
3. 实例工厂方法
4. FactoryBean方式。(源码底层用的多)
* BeanFactory和FactoryBean的区别?*
BeanFactory(ApplicationContext):是一个工厂(其实是构建了一个spring上下文的环境,容器),用来管理和获取很多Bean对象,
FactoryBean:是一个Bean生成工具,是用来获取一种类型对象的Bean,它是构造Bean实例的一种方式。
Bean的作用域
注意:在spring中默认值是singleton(单例),也就是说一个spring容器中,只能有一个对象的实例.
Bean的注入
简单来说,bean的注入就是给一个对象赋值.有三种方式:第一种:构造器参数注入
我们举一个实例: new Car(Sring id,Sring name,Double price),以下是applicationContext.xml的写法:
第二种:setter方法属性注入(setter方法的规范-JavaBean规范),这边举一个实例:
new Person(Integer id,String name,Car car),配置如下:
第三种:接口注入
这个就不放出实例了,有兴趣的朋友可以留言,或者自己去查找相关资料~
spEL表达式
spEL(Spring Expression Language)是一种表达式语言,它是spring3.x版本的新特性。它的作用是:支持在运行时操作和查询对象,其语法类似统一的EL语言,但是SpEL提供了额外的功能,功能更强大。
语法: #{…} , 引用另一个Bean 、属性、 方法
SpEL表达式的使用功能比较多,Bean操作相关的通常有:
1. #{beanid} 引用Bean(具体对象)
2. #{beanId.属性} 引用Bean的属性
3. #{beanId.方法(参数)} 调用Bean的方法
IOC容器装配Bean—基于注解的配置方式
扫描机制
这边想要引用注解,必须开启包扫描,让spring框架知道,哪些包下面有注解需要去扫描<context:componet-scan base-package="xxx.xxx"/>
依赖注入的注解
1.简单类型的注入: @Value:适用于简单类型注入@Value=("jack") String name;
2.复杂类型注入:
注解实现属性依赖注入,将注解加在setXxx方法上 或者 属性定义上 !(任选其一,省代码了)
Spring和web集成
可以发现 如果每次程序运行,我们都手动去new ClassPathXmlApplicationContext(),然后获得Bean,很麻烦. 而且spring容器是一个大对象,创建的时候要占用许多资源,所以,我们应该将其绑定到web Servlet 容器中,让Web容器来管理Spring容器的创建和销毁。其实这个操作对我们来说非常简单,就是在web.xml中配置一个Spring 容器的监听器,当web Servlet 启动,自动帮我们一次性创建spring 容器,初始化所有的Bean对象.当web Servlet 关闭,关闭掉我们的spring容器即可.
总结
相信通过这篇文章 ,大家也能像我一样对Spring 容器,IOC 思想有了初步的认识.我上传了部分资料,关于Spring 基础和源码,大家如果需要可以自行下载.链接: https://pan.baidu.com/s/1pNspgin 密码: zg97
相关文章推荐
- 通过简单Spring事例理解SpringIOC思想
- Spring IoC与AOP的核心思想
- Spring三大核心思想一:IOC
- Spring之IOC思想的理解和简单实现
- Spring ioc及aop思想
- Spring中的IOC/DI思想
- Spring IoC与AOP的核心思想
- 怎么运用spring的IoC思想
- Spring IOC/DI 设计思想
- Spring之IOC思想的理解和简单实现
- Spring 学习系列-----(二)IoC思想
- Spring IoC与AOP的核心思想(转载)
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- Spring核心思想,IoC与DI详解(如果还不明白,放弃java吧)
- (四)Spring核心思想 - IOC与DI
- Jimoshi_Spring 框架学习(一)--Spring实现IOC思想、javabean对象、Spring对象和对象之间关系
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- Spring学习(1):控制反转(IoC)和依赖注入(DI)的详解以及注解(annotation)开发入门案例
- 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3