Spring 问题整理

1、【切面AOP使用场景? AOP 代理了(三级缓存机制)?】

2、控制反转ioc与依赖注入DI(dependency injection)理解:

简单来说,之前我们需要一个对象,就需要创建一个对象,哪里用哪里创建,而通过spring的控制反转,它把对象都同意管理了起来,当我们需要用的时候,只需要通过注入的方式去取这个对象就好了,至于这个对象什么时候创建的,在哪里创建的,我们不用去关心,举个例子,在activit中,当spring把它集成过来之后,它里面所包含的对象就被spring给管理起来了,我们需要使用他的任务管理也好、模型管理也行,只需要向spring去取就行了,至于他的生命周期是如何管理的,我们不用去关心,开箱即用就好了

3、关于循环依赖问题

循环依赖这个问题现象很好描述,就是A里用了B,B里用了A,这种现象很常见,而且大多数情况下我们都会遇到这种现象,但大部门情况下没问题,

比如说,很多场景下,依赖注入时,我们选择的方式是成员变量注入的方式,这种方式就不会触发循环依赖,即便是出现A、B互相调用的情况,为什么呢?因为成员变量注入与setter方法注入,是在Bean创建完成之后,初始化对象的时候才会出现,而只有在构造方法注入时才会出现这种情况,因为构成方法注入时,是在实例化阶段发生的,而其他注入方式是在初始化阶段发生的,

而默认情况下,spring默认作用域是单例,在单例作用域下,在spring启动时,就把所有的bean都创建好了,同时在创建bean实例时,处理循环依赖问题

复制代码
问题:{
	The dependencies of some of the beans in the application context form a cycle:

   mqttController defined in file [D:\CodeProject\ops-parent\ops-facility\target\classes\com\szy\ops\box\controller\MqttController.class]
	  ↓
   orderManager (field private com.szy.ops.workflow.service.IWfProcessService com.szy.ops.web.order.service.manager.OrderManager.processService)
	  ↓
   IWfProcessServiceImpl defined in file [D:\CodeProject\ops-parent\ops-facility\target\classes\com\szy\ops\workflow\service\impl\IWfProcessServiceImpl.class]
	  ↓
   taskServiceBean defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
┌─────┐
|  processEngine defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
↑     ↓
|  springProcessEngineConfiguration defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
↑     ↓
|  activiti7Config (field private com.szy.ops.workflow.listener.GlobalEventListener com.szy.ops.workflow.config.Activiti7Config.globalEventListener)
↑     ↓
|  globalEventListener (field private org.activiti.engine.HistoryService com.szy.ops.workflow.listener.GlobalEventListener.historyService)
↑     ↓
|  historyServiceBean defined in class path resource [org/activiti/spring/boot/ProcessEngineAutoConfiguration.class]
└─────┘
}
	这里就出现了循环依赖问题,怎么处理呢?就用@Lazy 注解就可以了,@Lazy简单来说就是懒加载,只有在被访问时才会被实例化、初始化,具体原理就是通过创建一个【代理对象】来实现延迟化
{
	@Component
	public class GlobalEventListener implements ActivitiEventListener {

		@Autowired
		@Lazy
		private HistoryService historyService;
	}
}

4、【实例化Bean】,反射的方式生成对象?

5、bean的生命周期:https://gitee.com/fangguochao/spring_bean_life.git

6、spring用了哪些设计模式?【设计模式的理解】

7、spring事务管理

相关推荐
·薯条大王40 分钟前
MySQL联合查询
数据库·mysql
战族狼魂1 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
xyliiiiiL2 小时前
ZGC初步了解
java·jvm·算法
杉之3 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
morris1313 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch3 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
这个懒人4 小时前
深入解析Translog机制:Elasticsearch的数据守护者
数据库·elasticsearch·nosql·translog
Yan-英杰4 小时前
【百日精通JAVA | SQL篇 | 第二篇】数据库操作
服务器·数据库·sql
天天向上杰4 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal
请来次降维打击!!!4 小时前
优选算法系列(5.位运算)
java·前端·c++·算法