01 Spring之旅

Spring诞生的最初目的是为了替代EJB,提供更加轻量级和简单的编程模型
核心的思想是依赖注入和面向切面编程的概念

1.1 简化Java开发

通过POJO的轻量级和最小侵入性编程(只需提供一个简单的Bean)
通过依赖注入和面向接口实现松耦合(IoC,对接口编程)
基于切面和惯例进行声明式编程(声明式事务)
通过切面和模板减少某些固定的代码(路数据库链接、释放等)

Spring提供了基于Java的配置,可作为XML的替代方案(对重构友好)

DI能够让相互协作的软件组件保持松耦合,而面向切面编程允许你把遍布应用各处的功能分离出来形成可重用的组件(如日志记录)

Spring还提供了一系列模板代码,用于小厨样板式代码,如JDBC模板

1.2 容纳你的Bean

Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期

Spring自带多个容器的实现,常见的为BeanFactory和ApplicationContext,ApplicationContext更加常见

常见的应用上下文包括以下几种:

AnnotationConfigApplicationContext:从一个或多个基于Java的配置类中加载Spring应用上下文
AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文
ClassPathXmlApplicationContext:从类路径下的一个或多个XML配置文件中加载应用上下文
FileSystemXmlApplicationContext:从文件系统下的一个或多个XML文件中加载上下文定义
XmlWebApplicationContext:从Web应用上下文的一个或多个XML配置文件加载应用上下文定义

Bean的生命周期

1.Spring对Bean进行实例化
2.注入Bean所依赖的属性
3.如果bean实现了BeanNameAware接口,Spring将调用setBeanName()方法,把bean的ID传递进来
4.如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,把BeanFactory示例传递进来
5.如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,把bean所在的应用上下文传递进来
6.如果bean实现了BeanPostProcessor接口,Spring将调用它的postProcessBeforeInitialization方法,执行进行初始化操作之前的一些额外操作
7.如果bean实现了InitializingBean接口,Spring将调用它的afterPropertiesSet方法,执行初始化操作
8.如果Bean使用init-method声明了方法,则调用这些方法
9.如果bean实现了BeanPostProcessor接口,Spring将调用它的postProcessAfterInitialization方法,进行一些初始化后的收尾操作
9.此时,bean已经准备就绪,可以被应用程序使用了,它们将一直留在应用上下文中,知道应用上下文被销毁
10.如果bean实现了DisposableBean接口,Spring将调用它的destroy方法
11.如果bean使用了destroy-method声明了销毁方法,该方法也会被调用

BeanNameAware接口可以让Bean拿到自己被实例化时定义的名字

关于Bean的类名,有以下几种可能:

若显式定义了类名,则为你定义的类名
若没有显式定义,则与定义Bean的方式有关:
如果使用的是XML中的bean标签,则默认名称为包全名#*,*为从0开始一直往后递增的数字
如果使用的是JavaConfig方式,则默认类名与方法名相同
如果使用的是注解(@Component等),则默认名称为简单类名的首字母小写(UserDao-->userDao)

,若没有定义,则默认为包全名#*,*号从0开始,一直往后递增

BeanPostProcessor接口中定义了两个方法,分别是postProcessBeforeInitialization和postProcessAfterInitialization方法,分别在初始化操作的前后执行一些额外操作
经测试,这两个方法可能为执行多次,且如果Before返回了null,那么After则不会执行

时间: 2024-10-13 09:35:12

01 Spring之旅的相关文章

我的Spring之旅(二):为请求添加参数

1.前言 在上一篇我的Spring之旅(一)中,我们只是利用不带参数的请求返回一个网页或一段json,在实际的B/S.C/S网络交互中,请求中需要自定义的参数.本篇将简单地为之前的请求添加参数. 2.参数说明 ①method:API名称,用于区分服务端调用方法 ②name:请求参数名称,将作为method方法的实参 3.改写HelloController.java package com.nextgame.web; import java.io.IOException; import net.s

我的Spring之旅(二):为请求加入參数

1.前言 在上一篇我的Spring之旅(一)中,我们仅仅是利用不带參数的请求返回一个网页或一段json,在实际的B/S.C/S网络交互中,请求中须要自己定义的參数.本篇将简单地为之前的请求加入參数. 2.參数说明 ①method:API名称,用于区分服务端调用方法 ②name:请求參数名称,将作为method方法的实參 3.改写HelloController.java package com.nextgame.web; import java.io.IOException; import net

《01.Spring Boot连载:Spring Boot入门介绍》

1 Spring Boot的概述 Spring Boot是开发者和Spring 本身框架的中间层,帮助开发者统筹管理应用的配置,提供基于实际开发中常见配置的默认处理(即习惯优于配置),简化应用的开发,简化应用的运维:总的来说,其目的Spring Boot就是为了对Java web 的开发进行"简化"和加"快"速度,简化开发过程中引入或启动相关Spring 功能的配置.这样带来的好处就是降低开发人员对于框架的关注点,可以把更多的精力放在自己的业务代码上. 同时随着微服

01 - spring mvc 概述及配置DispatcherServlet

1.Spring mvc 基于model2实现,整体框架流程如(图片来自百度): ①web容器接收到http请求,若匹配DispatcherServlet的请求映射路径(web.xml),则容器会交给DispatcherServlet处理. ②DispatcherServlet根据请求的信息及handlerMapping(类似路由功能)的配置找到处理请求的Handler. ③Handler adapter对handler进行封装,使用统一的方法对Handler方法进行调用 ④处理器完成业务逻辑后

[Spring系列01]Spring IOC/DI模拟

本文以一个简单的实例大致模拟Spring IOC/DI的运行原理,代码简单分dao,model,service三层.即:dao 与数据库的操作,增删改查等方法model 一般都是javabean对象,例如与数据库的某个表相关联.service 供外部调用,等于对dao,model等进行了包装. 程序结构图如下: 先粘贴部分代码,再进行解释: UserDAO.java package com.ctsh.dao; import com.ctsh.model.User; public interfac

重温Spring之旅5——AOP代理对象、JDK动态代理、使用cglib生产代理

AOP--代理对象 代理模式:代理模式的英文叫做Proxy或Surrogate,中文都可译为"代理",所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 抽象主题角色:声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以是使用代理主题. 代理主题(Proxy)角色:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象:

SpringInAction读书笔记--第1章Spring之旅

1.简化Java开发 Spring是一个开源框架,它的根本使命在于简化java开发.为了降低java开发的复杂性,Spring采取了以下4种关键策略: 1.基于POJO的轻量级和最小侵入性编程:       有很多框架强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死,而基于Spring构建的应用通常没有任何痕迹表明你使用了Spring,最坏的场景是一个类或许会用到Spring注解,但它依旧是POJO. 2.通过依赖注入和面向接口实现松耦合:       任何应用都会由多个类相互协作完成

Spring之旅

Java使得以模块化构建复杂应用系统成为可能,它为Applet而来,但为组件化而留. Spring是一个开源的框架,最早由Rod Johnson创建.Spring是为了解决企业级应用开发的复杂性而创建的,但Spring又不仅仅局限于服务器端开发,任何Java应用都能在简单性.可测试性和松耦合性等方面从Spring中获益. Spring可以做很多事情,但归根结底,支撑Spring的仅仅是少许的基本理念,所有的理念都可以追溯到Spring最根本的使命:简化Java开发. 为了降低Java开发的复杂性

Spring之旅(2)

Spring简化Java的下一个理念:基于切面的声明式编程 3.应用切面 依赖注入的目的是让相互协作的组件保持松散耦合:而AOP编程允许你把遍布应用各处的功能分离出来形成可重用的组件. AOP面向切面编程被定义为促使应用程序分离关注点的一项技术.系统由许多不同的组件组成,每个组件除了负责某一特定的功能,还要承担额外的职责,诸如日志.事务管理和安全等等的服务经常融入到自身的核心业务逻辑中去,这些服务统称为横向关注点,因为它们总是跨越系统的各个组件. 将这些代码分散到多个组件,会导致双重复杂性: 如