一、Spring——IoC
IOC概述
- Spring中IOC的概念,控制反转概念其实包含两个层面的意思,“控制”是接口实现类的选择控制权;而“反转”是指这种选择控制权从调用者转移到外部第三方或容器的手中。
- BeanFactory、ApplicationContext和WebApplicationContext是Spring框架三个最核心的接口,框架中其他大部分的类都围绕他们展开、为他们提供支持和服务。在这些支持类中,Respurce是一个不可忽视的重要接口,框架通过Resource实现了和具体资源的解耦,不论他们位于何种存储介质中,都可以通过相同的实例返回。与Resource配合的另一个接口是ResourceLoader,ResourceLoader采用了策略模式,可以通过传入资源地址的信息,自动选择适合的底层资源实现类,为上层对资源的引用提供极大的便利。
一、IOC 控制反转:
- 1、“控制”是指接口实现类的选择控制权;
- 2、“反转”是指这种选择控制权从调用类转移到外部第三方类或者容器手里;
二、Spring三大最核心接口:
BeanFactory
- 1、Spring框架的基础设施,面向Spring本身;
- 2、在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;
- 3、若需要对bean定义后处理器,必须在代码中通过手工调用spring方法进行注册;
- 4、初始化方式
new XmlBeanFactory(new Resource());
ApplicationContext
- 1、面向使用Spring框架的开发者,几乎所有的应用场合我们都直接使用ApplicationContext文件中定义的 Bean;
- 2、在初始化应用上下文时就实例化所有的单例的Bean
- 3、若需要对bean定义后处理器,其会利用反射机制自动识别出配置文件中的Processor,并自动注册到应用上下文中
- 4、初始化方式
new ClassPathXmlApplication("classpath:bean.xml")
new FileSystemXmlApplicationContext("file:beans.xml")
new AnnotationConfigApplicationContext(Beans.class)
WebApplicationContext
- 1、WebApplication需要ServletContext实例,也就是说他必须要在拥有Web容器的前提下才能完成启动工作。
- 2、Spring分别提供了用于启动WebApplicationConetext的Servlet和Listener,在web.xml中配置
org.springframework.web.context.ContextLoaderServlet org.springframework.web.context.ContextLoaderListener
- 3、WebApplicationContext需要使用日志功能,用户可以将Log4j配置文件放到类路径 WEB-INF/classes下,这时Log4j引擎即可顺利启动。用户可以在web.xml中通过Log4jConfigServlet和Log4jConfigListener指定Log4j配置文件位置,但要注意启动顺序(load-on-startup)
- 4、使用标注@Configuration的java类提供信息,contextClass、contextConfigLocation
三、Bean生命周期改变方式:
- 1、<bean>中的init-method 和 destroy-method 这两个属性为Bean指定初始化和销毁的方法
- 2、InitDestroyAnonotationBeanPostProcessor 的 @PostConstruct、@PreDestroy
Spring 配置概述:
- 用户可以通过属性注入、构造函数注入的方式建立Bean和Bean的依赖;可以通过字面值的方式设置Bean的属性,也可以通过ref引用容器中其他的Bean;Spring为集合类提供了专门的配置标签;
- 使用Spring简化配置方式可以让配置文件更加紧凑;可以通过配置文件中的<bean>标签建立关联、继承、依赖、引用的关系,合理地使用这些关系可以简化配置、提高配置质量;
- Spring提供了5个Bean作用范围,在Web应用环境下,可以使用request、 session和globalSession的Bean作用域;
- 通过@Component及另外三个衍型注解(@Repository、@Service、@Controller)配合@Autowired就可以很好地使用基于注解的配置进行Bean的定义和注入,这种方式比在XML文件中通过<bean>提供配置文件更加简单;
- 任务POJO标注了@Configuration注解后就可以为Spring容器提供Bean的定义信息,在类方法中标注@Bean相当于定义了一个Bean,同时还提供了Bean的实例化逻辑。由于Bean的实例化逻辑是在方法中定义的,因此他可以应对一些复杂的Bean的实例化场景。
- 不管配置使用何种配置方式,Spring都可以很好地将他们整合起来,在Spring容器内部,这些不同方法的Bean定义信息是大体相同的,三者指甲并不存在谁替代谁的问题,他们都有自己最合适的应用场合。
一、Spring容器高层视图
Bean的实现类
Bean的属性信息,数据库连接数、用户名、秘密
Bean的依赖
Bean的行为配置
二、基于XML的配置
- 1、 schema格式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns.xsi=
"http://www.w3.org/2001/XMLSchema-instance"xmlns.aop="http://www/springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/beans/spring-aop-3.0.xsd">
<!--默认命名空间的配置-->
<bean id="a" class=""/>
<!--aop命名空间的配置-->
<aop:config></aop:config>
</beans>
2、依赖注入
- 1、属性注入
- 2、构造函数注入:
按照类型匹配入参;
按照索引匹配入参;
联合使用类型个索引匹配入参;
通过自身类型反射匹配入参;
3、工厂方法注入:非静态工厂方法;静态工厂方法
由于Spring IoC容器以框架的形式提供工厂方法的功能,并以透明的方式开放给开发者,所以很少需要手工编写基于工厂方法的类。不过在一些遗留系统或第三方类库中,我们还会碰到工厂方法,这时用户可以使用Spring工厂方法注入的方式进行配置。
4、方法注入。
lookup方法注入 无状态Bean的作用域一般配置为singletion单实例模式,如果我们往singletion的类A中注入prototype的类B,并希望每次调用A的getB()都能返回一个新的B,使用传统的注入方法无法实现这样的要求。使用lookup方法注入可以实现方法替换,可以使用Bean的方法去替换另一个Bean的方法。
3、注入参数详解
- 1、字面值
- 2、引用其他Bean
- 3、内部Bean
- 4、null值 <value></value>
- 5、级联属性 <property name="a.b.c" value="">
- 6、集合类型属性
4、简化配置方式
- 1、字面值属性
- 2、引用对象属性
- 3、使用p命名空间
- 4、自动装配
5、bean之间的关系
- 1、继承
- 2、依赖
- 3、引用
6、整合多个配置文件
- 1、在启动Spring容器时,通过一个Spring数组来指定这些配置文件;
- 2、应用层面提供一个整合的配置文件,通过<import>将各个模块整合起来,这样容器在启动时,只需要关注这个整合的配置文件就可以了;
7、Bean的作用域
- 1、singleton
一般情况下,无状态或者状态不可变的类适合使用单例类。在传统开发中,由于Dao类执有Connection这个非线程安全的变量而没有采用单例模式。而在Spring环境下,对于所有的Dao类都可以采用单实例模式,因为Spring利用AOP和LocalThread的功能,对非线程安全的类的变量(或称状态)进行了特殊的处理,使这些非线程安全的类变成线程安全的类。
- 2、prototype
- 3、request
- 4、session
- 5、globalSession
8、FactoryBean。实例化Bean得过程如果比较复杂,可以使用Spring提供的 org.springframework.beans.factory.FactoryBean工厂类接口定制实例化Bean的逻辑
三、基于注解的配置
1、注解:
- @Compoment: Spring容器自动将POJO转换为容器管理的Bean;
- @Repository: 用于对Dao实现类进行标注;
- @Service:用于对Service实现类进行标注;
- @Controller:用于对Controller实现类进行标注
2、使用注解配置信息启动Spring容器。声明context命名空间,扫描类包以应用注解定义的Bean
<context:component-scan base-package="">
3、自动装配Bean
- 通过@Autowired进行自动注入
- 使用@Auto的required属性
- 使用@Qualifier指定注入Bean的名称
- 对类方法进行标注
- 对集合类进行标注
- 对标准注解的支持
@Resource 自动采用标注处的变量名或方法名作为Bean的名称
@Inject
4、Bean作用范围及生命过程方法
- @Scope指定Bean的作用范围
- @PostConstruct @PreDestory改变Bean的生命过程
四、基于Java类的配置
1、使用Java类提供Bean定义信息
- 普通POJO只要标注@Configuration注解,就可以为Spring容器提供Bean定义的信息了
2、使用基于Java类的配置信息启动Spring容器
- 使用AnnotationConfigApplicationContext
- 通过XML配置文件引用@Configuration的配置
<context:component-scan base-package="" resource-pattern=".class">
- 通过 Configuration配置类引用XMl配置信息
@ImportResurce
- Spring中IOC的概念,控制反转概念其实包含两个层面的意思,“控制”是接口实现类的选择控制权;而“反转”是指这种选择控制权从调用者转移到外部第三方或容器的手中。
- BeanFactory、ApplicationContext和WebApplicationContext是Spring框架三个最核心的接口,框架中其他大部分的类都围绕他们展开、为他们提供支持和服务。在这些支持类中,Respurce是一个不可忽视的重要接口,框架通过Resource实现了和具体资源的解耦,不论他们位于何种存储介质中,都可以通过相同的实例返回。与Resource配合的另一个接口是ResourceLoader,ResourceLoader采用了策略模式,可以通过传入资源地址的信息,自动选择适合的底层资源实现类,为上层对资源的引用提供极大的便利。
一、IOC 控制反转:
- 1、“控制”是指接口实现类的选择控制权;
- 2、“反转”是指这种选择控制权从调用类转移到外部第三方类或者容器手里;
二、Spring三大最核心接口:
BeanFactory
- 1、Spring框架的基础设施,面向Spring本身;
- 2、在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;
- 3、若需要对bean定义后处理器,必须在代码中通过手工调用spring方法进行注册;
- 4、初始化方式
new XmlBeanFactory(new Resource());
ApplicationContext
- 1、面向使用Spring框架的开发者,几乎所有的应用场合我们都直接使用ApplicationContext文件中定义的 Bean;
- 2、在初始化应用上下文时就实例化所有的单例的Bean
- 3、若需要对bean定义后处理器,其会利用反射机制自动识别出配置文件中的Processor,并自动注册到应用上下文中
- 4、初始化方式
new ClassPathXmlApplication("classpath:bean.xml")new FileSystemXmlApplicationContext("file:beans.xml")new AnnotationConfigApplicationContext(Beans.class)
WebApplicationContext
- 1、WebApplication需要ServletContext实例,也就是说他必须要在拥有Web容器的前提下才能完成启动工作。
- 2、Spring分别提供了用于启动WebApplicationConetext的Servlet和Listener,在web.xml中配置
org.springframework.web.context.ContextLoaderServlet org.springframework.web.context.ContextLoaderListener - 3、WebApplicationContext需要使用日志功能,用户可以将Log4j配置文件放到类路径 WEB-INF/classes下,这时Log4j引擎即可顺利启动。用户可以在web.xml中通过Log4jConfigServlet和Log4jConfigListener指定Log4j配置文件位置,但要注意启动顺序(load-on-startup)
- 4、使用标注@Configuration的java类提供信息,contextClass、contextConfigLocation
三、Bean生命周期改变方式:
- 1、<bean>中的init-method 和 destroy-method 这两个属性为Bean指定初始化和销毁的方法
- 2、InitDestroyAnonotationBeanPostProcessor 的 @PostConstruct、@PreDestroy
Spring 配置概述:
- 用户可以通过属性注入、构造函数注入的方式建立Bean和Bean的依赖;可以通过字面值的方式设置Bean的属性,也可以通过ref引用容器中其他的Bean;Spring为集合类提供了专门的配置标签;
- 使用Spring简化配置方式可以让配置文件更加紧凑;可以通过配置文件中的<bean>标签建立关联、继承、依赖、引用的关系,合理地使用这些关系可以简化配置、提高配置质量;
- Spring提供了5个Bean作用范围,在Web应用环境下,可以使用request、 session和globalSession的Bean作用域;
- 通过@Component及另外三个衍型注解(@Repository、@Service、@Controller)配合@Autowired就可以很好地使用基于注解的配置进行Bean的定义和注入,这种方式比在XML文件中通过<bean>提供配置文件更加简单;
- 任务POJO标注了@Configuration注解后就可以为Spring容器提供Bean的定义信息,在类方法中标注@Bean相当于定义了一个Bean,同时还提供了Bean的实例化逻辑。由于Bean的实例化逻辑是在方法中定义的,因此他可以应对一些复杂的Bean的实例化场景。
- 不管配置使用何种配置方式,Spring都可以很好地将他们整合起来,在Spring容器内部,这些不同方法的Bean定义信息是大体相同的,三者指甲并不存在谁替代谁的问题,他们都有自己最合适的应用场合。
一、Spring容器高层视图
Bean的实现类
Bean的属性信息,数据库连接数、用户名、秘密
Bean的依赖
Bean的行为配置
二、基于XML的配置
- 1、 schema格式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns.xsi=
"http://www.w3.org/2001/XMLSchema-instance"xmlns.aop="http://www/springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/beans/spring-aop-3.0.xsd">
<!--默认命名空间的配置-->
<bean id="a" class=""/>
<!--aop命名空间的配置-->
<aop:config></aop:config>
</beans>
2、依赖注入
- 1、属性注入
- 2、构造函数注入:
按照类型匹配入参;
按照索引匹配入参;
联合使用类型个索引匹配入参;
通过自身类型反射匹配入参; 3、工厂方法注入:非静态工厂方法;静态工厂方法
由于Spring IoC容器以框架的形式提供工厂方法的功能,并以透明的方式开放给开发者,所以很少需要手工编写基于工厂方法的类。不过在一些遗留系统或第三方类库中,我们还会碰到工厂方法,这时用户可以使用Spring工厂方法注入的方式进行配置。
4、方法注入。
lookup方法注入 无状态Bean的作用域一般配置为singletion单实例模式,如果我们往singletion的类A中注入prototype的类B,并希望每次调用A的getB()都能返回一个新的B,使用传统的注入方法无法实现这样的要求。使用lookup方法注入可以实现方法替换,可以使用Bean的方法去替换另一个Bean的方法。
3、注入参数详解
- 1、字面值
- 2、引用其他Bean
- 3、内部Bean
- 4、null值 <value></value>
- 5、级联属性 <property name="a.b.c" value="">
- 6、集合类型属性
4、简化配置方式
- 1、字面值属性
- 2、引用对象属性
- 3、使用p命名空间
- 4、自动装配
5、bean之间的关系
- 1、继承
- 2、依赖
- 3、引用
6、整合多个配置文件
- 1、在启动Spring容器时,通过一个Spring数组来指定这些配置文件;
- 2、应用层面提供一个整合的配置文件,通过<import>将各个模块整合起来,这样容器在启动时,只需要关注这个整合的配置文件就可以了;
7、Bean的作用域
- 1、singleton
一般情况下,无状态或者状态不可变的类适合使用单例类。在传统开发中,由于Dao类执有Connection这个非线程安全的变量而没有采用单例模式。而在Spring环境下,对于所有的Dao类都可以采用单实例模式,因为Spring利用AOP和LocalThread的功能,对非线程安全的类的变量(或称状态)进行了特殊的处理,使这些非线程安全的类变成线程安全的类。
- 2、prototype
- 3、request
- 4、session
- 5、globalSession
8、FactoryBean。实例化Bean得过程如果比较复杂,可以使用Spring提供的 org.springframework.beans.factory.FactoryBean工厂类接口定制实例化Bean的逻辑
三、基于注解的配置
1、注解:
- @Compoment: Spring容器自动将POJO转换为容器管理的Bean;
- @Repository: 用于对Dao实现类进行标注;
- @Service:用于对Service实现类进行标注;
- @Controller:用于对Controller实现类进行标注
2、使用注解配置信息启动Spring容器。声明context命名空间,扫描类包以应用注解定义的Bean
<context:component-scan base-package="">3、自动装配Bean
- 通过@Autowired进行自动注入
- 使用@Auto的required属性
- 使用@Qualifier指定注入Bean的名称
- 对类方法进行标注
- 对集合类进行标注
- 对标准注解的支持
@Resource 自动采用标注处的变量名或方法名作为Bean的名称
@Inject
4、Bean作用范围及生命过程方法
- @Scope指定Bean的作用范围
- @PostConstruct @PreDestory改变Bean的生命过程
四、基于Java类的配置
1、使用Java类提供Bean定义信息
- 普通POJO只要标注@Configuration注解,就可以为Spring容器提供Bean定义的信息了
2、使用基于Java类的配置信息启动Spring容器
- 使用AnnotationConfigApplicationContext
- 通过XML配置文件引用@Configuration的配置
<context:component-scan base-package="" resource-pattern=".class"> - 通过 Configuration配置类引用XMl配置信息
@ImportResurce
一、Spring——IoC的更多相关文章
- 【初探Spring】------Spring IOC(三):初始化过程---Resource定位
我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...
- 【初探Spring】------Spring IOC(一)
IOC:Inversion of Control(控制反转).IOC它所体现的并不是一种技术,而是一种思想,一种将设计好的对象交给容器来管理的思想.IOC的核心思想就体现在控制.反转这两个词上面,要理 ...
- spring ioc
spring ioc是spring的核心之一,也是spring体系的基础,那么spring ioc所依赖的底层技术是什么的?反射,以前我们开发程序的时候对象之间的相互调用需要用new来实现,现在所有的 ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- spring笔记6 spring IOC的中级知识
1,spring ioc的整体流程,xml配置 spring ioc初始化的流程结合上图 步骤编号 完成的工作 1 spring容器读取配置文件,解析称注册表 2 根据注册表,找到相应的bean实现类 ...
- 谈谈对Spring IOC的理解(转)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 自己动手编写spring IOC源码
前言:对于spring IOC概念不是很了解的朋友可以阅读我上一篇博客--轻松理解spring IOC(这两篇博客也是由于我的个人原因导致现在才发布,惭愧啊).通过这篇博客的理解之后,相信大家会对sp ...
- spring ioc 源码解析
什么是ioc? 通俗的解释是:(spring)框架中,完成对象的创建和注入的容器. springIOC体系结构: spring IOC的创建是典型的工厂模式,这一系列的bean工厂如上所示. 其核心是 ...
- Spring:源码解读Spring IOC原理
Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. I ...
- 谈谈对Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
随机推荐
- Django1.9开发博客(10)- 全文搜索
Django本身不提供全文检索的功能,但django-haystack为其提供了全文检索的框架. django-haystack能为Django提供whoosh,solr,Xapian和Elastic ...
- sql注入基于错误-单引号-字符型
查找注入点 在url中: 1. ' 2. and 1=1/and 1=2 3. 随即输入(整形) 4. -1/+1回显上下页面(整形) 5. and sleep(5) (判断页面返回时间) 判断有 ...
- C++ template的一些高级用法(元编码,可变参数,仿函数,using使用方法,. C++ 智能指针)
1 . 通用函数可变参数模板 对于有些时候,我们无法确切的知道,函数的参数个数时,而又不想过多的使用所谓的函数重载,那么就可以效仿下面的例子: #include<iostream> #i ...
- label for
一般我们在使用radio 时都是结合label来使用的 <label><input type=”radio” name=”radio” value=’0’/>男</l ...
- 编写windows版ANE
1.编写WinANE.dll: #include <windows.h> #include <stdlib.h> #include <FlashRuntimeExtens ...
- 读《程序员的SQL金典》[3]--表连接、子查询
一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...
- at
1.这个命令对于自己建立的虚拟机很有帮助,比如你想过半个小时关机: [root@oc3408554812 ~]# at now + 30 minutesat> cd /tmp -h nowat& ...
- WCF初探-13:WCF客户端为双工服务创建回调对象
前言: 在WCF初探-5:WCF消息交换模式之双工通讯(Duplex)博文中,我讲解了双工通信服务的一个应用场景,即订阅和发布模式,这一篇,我将通过一个消息发送的例子讲解一下WCF客户端如何为双工服务 ...
- SQL Server 中的 NOLOCK 用法
大家都知道,每新建一个查询,都相当于创建一个会话,在不同的查询分析器里面进行的操作,可以影响到其他会话的查询,极端的情况可能会一直处于阻塞中,哪怕只是一个很简单的查询都“特别慢”. BEGIN TRA ...
- pthread_mutex_lock
pthread_mutex_lock pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mut ...