Spring基础知识(1)

一、理解IOC控制反转和DI依赖注入

IOC:就是将原本在程序中手动创建对象的权利,交给Spring框架管理。

DI:依赖注入,就是在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件。

IoC和DI的区别?

IOC:指将对象的创建权,反转到Spring容器。

DI:指Spring创建对象的过程中,将对象依赖的属性通过配置进行注入。

二、Spring的核心配置文件

applicationContext.xml

在程序中读取Spring配置文件的方式:

在程序中读取Spring配置文件,通过Spring框架获得Bean,完成相应操作

加载classpath (src):

new ClassPathXmlApplicationContext("applicationContext.xml");

加载磁盘路径:

new FileSystemXmlApplicationContext("applicationContext.xml");

创建Spring 核心工厂对象

通过工厂的getBean 获得配置实例对象 (IHelloService) applicationContext.getBean("helloService");

三、Spring工厂接口

BeanFactory接口和ApplicationContext接口区别?

*ApplicationContext接口间接继承于BeanFactory接口,其实Spring的核心工厂是BeanFactory。但是在现在的开发中,BeanFactory用的已经非常少了。

那么,BeanFactory和ApplicationContext最明显的区别是什么呢?

1、BeanFactory采取延迟加载策略,第一次getBean时才会初始化Bean。而ApplicationContext是在加载配置文件时初始化Bean。

2、ApplicationContext是对BeanFactory的扩展,提供了更多功能。

国际化处理、事件传递、Bean自动装配、各种不同应用层的Context实现。

由上可见,ApplicationContext是对BeanFactory的加强扩展。ApplicationContext的功能比BeanFactory更加多,所以现在开发中基本都在使用ApplicationContext,web项目中使用WebApplicationContext,很少用到BeanFactory。

四、IoC容器装配Bean(xml配置方式)

1、Spring提供配置Bean三种实例化方式

1)使用类构造器实例化(默认无参数)

<bean id="bean1" class="cn.itcast.spring.b_instance.Bean1"></bean>

2)使用静态工厂方法实例化(简单工厂模式)

<bean id="bean2" class="cn.itcast.spring.b_instance.Bean2Factory" factory-method="getBean2"></bean>

3)使用实例工厂方法实例化(工厂方法模式)

<bean id="bean3Factory" class="cn.itcast.spring.b_instance.Bean3Factory"></bean>

<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>

2、Bean的其它属性配置

1)<bean>元素的id属性 和 name属性的区别

早期Spring开发中 Bean的 id属性 ,遵守xml语法 id约束

* id 的命名要满足XML对ID属性命名规范 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

使用name属性,就可以使用很多特殊字符  , 早期在struts1 和 spring整合

<bean name="/login" class="....LoginAction" />  name中含有/ ,使用id会报错

****** 如果元素没有id只有name ,name 属性值可以作为id 使用

2)<bean>元素scope属性

* scope="singleton" 单例 ,在Spring IoC容器中仅存在一个Bean实例 (默认的scope)

* scope="prototype" 多例 ,每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时 ,相当于执行new XxxBean()

* scope="request" 用于web开发,将Bean放入request范围 ,request.setAttribute("xxx") , 在同一个request 获得同一个Bean

* scope="session" 用于web开发,将Bean 放入Session范围,在同一个Session 获得同一个Bean

* scope="globalSession" 一般用于Porlet应用环境 , 分布式系统存在全局session概念 ,如果不是porlet环境,globalSession 等同于Session

在开发中主要使用 scope="singleton"、 scope="prototype"

3、Bean的生命周期

在配置 <bean> 元素,通过 init-method 指定Bean的初始化方法,通过 destroy-method 指定Bean销毁方法

*  destroy-method 只对 scope="singleton" 有效

*  销毁方法,必须关闭ApplicationContext对象,才会被调用

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

applicationContext.close();

Bean的完整生命周期 (十一步骤)

1、instantiate bean对象实例化

2、populate properties 封装属性

3、如果Bean实现BeanNameAware 执行 setBeanName

4、如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext

5、如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization

6、如果Bean实现InitializingBean 执行 afterPropertiesSet

7、调用<bean init-method="init"> 指定初始化方法 init

8、如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization

9、执行业务处理

10、如果Bean实现 DisposableBean 执行 destroy

11、调用<bean destroy-method="customerDestroy"> 指定销毁方法 customerDestroy

第三步和第四步,使Bean 了解Spring容器

第五步和第八步,使用BeanPostProcessor 就是钩子函数,作用用来对Bean对象进行扩展

问题: 在userDAO对象所有方法上 添加运行时间监控

解决: 使用 BeanPostProcessor 完成

时间: 2024-10-16 07:46:48

Spring基础知识(1)的相关文章

spring基础知识(三)——aop

spring基础知识(三)--aop面向切面编程 1.概念术语 aop面向切面编程(Aspect ariented Programming) 在开始之前,需要理解Spring aop 的一些基本的概念术语(总结的个人理解,并非Spring官方定义): 切面(aspect):用来切插业务方法的类. 连接点(joinpoint):是切面类和业务类的连接点,其实就是封装了业务方法的一些基本属性,作为通知的参数来解析. 通知(advice):在切面类中,声明对业务方法做额外处理的方法. 切入点(poin

Spring 基础知识

Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由一组相互协作的对象组成.而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成.所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作

Spring基础知识详解

Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯. 2. 使用Spring框架的好处是什么? 轻量:Spring 是轻量的,基本的版本大约2MB. 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们. 面向切面的

Spring基础知识及入门

---恢复内容开始--- 1 spring框架概述 1.1 什么是spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Sprin

spring基础知识汇总及常见面试题目总结

Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版.Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率. Spring总结起来优点如下: 低侵入式设计,代码的污染极低. 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺. Spring的IoC容器降低了业务对象替换的复杂性,提高

Spring基础知识之基于注解的AOP

背景概念: 1)横切关注点:散布在应用中多处的功能称为横切关注点 2)通知(Advice):切面完成的工作.通知定了了切面是什么及何时调用. 5中可以应用的通知: 前置通知(Before):在目标方法被调用前调用通知功能. 后置通知(After):在目标方法完成后调用通知,此时不会关系方法输出什么. 返回通知(After-returning):在目标方法成功执行后调用通知. 异常通知(After-throwing):在目标方法抛出异常后调用通知. 环绕通知(Around):通知包裹了被通知的方法

Spring基础知识之装配Bean

装配(wiring):创建应用对象之间协作关系的行为.这是依赖注入的本质. Spring配置的可选方案 Spring提供了三种装配机智: 1)在XML中进行显示装配 2)在java中进行显示装配 3)隐式Bean发现机制和自动装配 自动化装配 Spring从两个角度来实现自动化装配: 1)组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean. 2)自动装配(autowiring):Spring自动满足bean之间的依赖. 创建可被发现的bean 案

spring基础知识

Spring ApplicationContext 正是spring容器 创建ApplicationContext ApplicationContext ctx=new ClassPathXmlApplication(“bean.xml”); public  class PersonService{ pivate String name; set get 方法 } bean.xml <bean id =”personService” class=”cn.my.PersonService”> &

spring基础知识汇总

Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版.Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率. Spring总结起来优点如下 低侵入式设计,代码的污染极低 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺 Spring的IoC容器降低了业务对象替换的复杂性,提高了组件

spring基础知识概述

$  Spring框架的作用和优点: 1.Spring是一个开源的轻量级的应用型框架,其目的是简化企业级应用程序的开发,减少入侵. 2.Spring提供的IOC和AOP,可以将组件的耦合度降到最低,即解耦,便于系统日后的维护和升级. 注:IOC:控制反转,是一种设计模式,一层含义是控制权的转移:由传统的在程序中控制依赖,转到由程序来控制. 第二层的含义是:将相互依赖的对象分离,在配置文件中描述他们的依赖关系,他们的依赖关系只有在使用时才建立. AOP:面向切面,是一种编程思想,将系统中非核心的业