面试刷题30:SpringBean的生命周期?

spring是Java软件开发的事实标准。
我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的?
答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程),ioc改善了模块之间的耦合问题,
依赖注入的方式:set方法,构造方法,成员变量+ @Autowire ;Bean的管理是IOC的主要功能。
bean的生命周期完全由spring容器管理,从属性设置到各种依赖关系的注入,简化了开发人员对bean的生命周期认知;
Spring的容器中Bean生命周期如下:
对象创建
1,从xml配置的Bean,@Bean注解,或者Java代码BeanDefinitionBuilder中读取Bean的定义,实例化Bean对象;
2,设置Bean的属性;
3,注入Aware的依赖(BeanNameAware,BeanFactoryAware,ApplicationContextAware);
4, 执行通用的方法前置处理,方法: BeanPostProcessor.postProcessorBeforeInitialization()
5, 执行 InitalizingBean.afterPropertiesSet() 方法
6,执行Bean自定义的初始化方法init,或者 @PostConstruct 标注的方法;
7,执行方法BeanPostProcessor.postProcessorAfterInitialization()
8, 创建对象完毕;
对象销毁
9, 执行 DisposableBean.destory() 方法;
10,执行自定义的destory方法或者 @PreDestory 标注的方法;
11,销毁对象完毕
下面扩展一下spring的bean关联面试问题。
Bean的作用域

面向切面编程
aop:为了java的应用更好的模块化,解决程序中的事务,安全,日志等问题;
使用java的动态代理(接口代理)或者CGlib(扩展代理类)实现。

主要元素如下图:
Aspect: 定义切面 , Advice定义增强,增强的类型见上图;
pointcut: 切点,即切入哪些类的哪些方法;

spring应用中使用AOP的实例代码:
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import java.lang.reflect.Method
/**
* 服务层AOP
*/
@Aspect
@Service
@Order(0)
@Slf4j
public class ServiceInterceptor {
@Pointcut("execution(public * com.xxx.ihs.yyy.admin.manager..*.*(..))")
public void pointcut() {
}
private String serviceName() {
return "xxxrest";
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
Method method = ((MethodSignature) pjp.getSignature()).getMethod();
final String methodName = method.getDeclaringClass().getCanonicalName().concat(".").concat(method.getName());
Object[] args = pjp.getArgs();
Object returnObj = null;
try {
returnObj = pjp.proceed();
} catch (Exception ex) {
String message = String.format("[%s]服务发生系统错误:%s", this.serviceName(), ex.getMessage());
log.error("{}, method:{},args:{}", message, methodName, JsonUtils.toJson(args), ex);
throw ex;
}
return returnObj;
}
}
小结
本篇回答了spring的ioc容器的Bean生命周期的过程。
然后简单的说明了一下Bean的作用范围;
最后说到了AOP,简要的介绍了使用的场景,切入流程以及一个使用实例。

原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!
面试刷题30:SpringBean的生命周期?的更多相关文章
- 一步步实现:springbean的生命周期测试代码
转载. https://blog.csdn.net/baidu_37107022/article/details/76552052 1. 创建实体SpringBean public class Spr ...
- 安利一个基于Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽
推荐: 接近100K star 的Java学习/面试指南 Github 95k+点赞的Java面试/学习手册.pdf 今天给小伙伴们推荐一个朋友开源的面试刷题系统. 这篇文章我会从系统架构设计层面详解 ...
- SpringBean的生命周期 以及一些问题总结
SpringBean的生命周期 一.传统 Bean 的生命周期 new实例化: 可使用了 无引用时,GC回收. 二.Servlet 的生命周期 实例化Servlet对象: init初始化对象: 相应客 ...
- SpringBean的生命周期以及循环依赖过程
上面就是springBean的大致生命周期. Bean的创建过程 创建Bean之前会调用Bean工厂的后置处理器,可以获取到BeanDefinition Bean的初始化过程 初始化之前会调用前置处理 ...
- 面试刷题17:线程两次start()会发生什么?
线程是并发编程的基础元素,是系统调度的最小单元,现代的jvm直接对应了内核线程.为了降低并发编程的门槛,go语言引入了协程. 你好,我是李福春,我在准备面试,今天的题目是? 一个线程两次调用start ...
- 面试刷题28:如何写出安全的java代码?
对jdk,jvm,java应用程序的攻击多种多样?那么从java程序员的角度,如何写出安全的代码呢? 我是李福春,我在准备面试,今天的题目是:如何写出安全的java代码? 答:这个需要从功能设计到实现 ...
- spring-bean(全生命周期)
作用:在初始化和销毁bean时候,做一些处理工作是调用生命周期方法 格式: <bean id=”该生命周期的名称” class=”提供方法的类的全路径” init-methood=”init” ...
- 有效的括号序列——算法面试刷题4(for google),考察stack
给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列. 括号必须依照 "()" 顺序表示, & ...
- 相似的RGB颜色——算法面试刷题3(for google),考察二分
在本题中,每个大写字母代表从“0”到“f”的一些十六进制数字. 红绿蓝三元色#AABBCC可以简写为#ABC. 例如,#15c是颜色#1155cc的简写. 现在,假设两种颜色#ABCDEF和#UVWX ...
随机推荐
- 得亏了它,我才把潜藏那么深的Bug挖出来
2020年写了很多事故解决的文章,并不是我绞尽脑汁想出来的,而是真的遇到了这些问题.通过文章的方式记录下来,分享出去,才有意义. 事故背景 首先看下面的图吧,这是我从cat上截的图. 可以看到是一个R ...
- UVA - 10462 Is There A Second Way Left?
题意: 给你一张无向图,让你判断三种情况:1.不是连通图(无法形成生成树)2.只能生成唯一的生成树 3.能生成的生成树不唯一(有次小生成树),这种情况要求出次小生成树的边权值和. 思路: 比较常见的次 ...
- FCC 成都社区·技术周刊 第 14 期
[前端] 1. React Fiber 架构 React16 启用了全新的架构,叫做 Fiber,其最大的使命是解决大型 React 项目的性能问题,再顺手解决之前的一些痛点. 详情:https:// ...
- Ubuntu 16 编译装python2.7
Ubuntu 16自带 python3 ,有很多库无法使用,决定装 python2.7 试了试,好像 apt-get 装不上. 使用源码,编译安装. wget https://www.python.o ...
- Java中将文件夹复制到另一个文件夹
文件夹的拷贝*** public static void copyDir(String sourcePath, String newPath) { File start = new File(sour ...
- const 详解
简单分类: 常变量 const 类型 变量名 或者 类型 const 变量名 常引用 const 类型& 引用名 ...
- 利用mnist数据集进行深度神经网络
初始神经网络 这里要解决的问题是,将手写数字的灰度图像(28 像素 x28 像素)划分到 10 个类别中(0~9).我们将使用 MINST 数据集,它是机器学习领域的一个经典数据集,其历史几乎和这个领 ...
- php7连接mysql8
最近因为剁手买了mac所以在mac上搭建lnmp环境. 刚好看到mysql从5.7跳到8,性能据说快上一倍,果断尝鲜! lnmp基本都弄好了,但是到用php连接Mysql这一步出了岔子. 出错原因: ...
- Java 14 发布了,可以扔掉Lombok了?
2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载.在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 359: Records 官方吐槽最为致命 ...
- mui switch 点击事件不冒泡
工作上遇到一个问题 手机移动端app,采用mui框架,要求左边是手机号码,右边是switch开关,并且点击标题的时候,可以展开下面人员的基本信息. 采用了折叠面板. 先上图如下: 开始时出现的问题是: ...
