中国企业500强名单公布优化网站被百度屏

张小明 2026/1/9 7:37:15
中国企业500强名单公布,优化网站被百度屏,医院网站建设的规划方案,谁做广东11彩票网站深入了解Spring Core的核心原理、核心组件、实际使用方式以及底层逻辑#xff0c;搞清楚它作为整个Spring生态基石的具体实现和价值。 Spring Core是Spring框架的根模块#xff0c;也是所有Spring扩展框架#xff08;如Spring Boot、Spring MVC#xff09;的底层基础。它的…深入了解Spring Core的核心原理、核心组件、实际使用方式以及底层逻辑搞清楚它作为整个Spring生态基石的具体实现和价值。Spring Core是Spring框架的根模块也是所有Spring扩展框架如Spring Boot、Spring MVC的底层基础。它的核心使命是通过控制反转IoC和依赖注入DI实现对象的解耦管理彻底改变传统Java开发中对象创建和依赖管理的方式。下面我会从「核心思想」→「核心组件」→「实际使用」→「底层流程」逐层拆解结合代码示例让你彻底理解。一、Spring Core的核心思想IoC DI这是Spring Core的灵魂先把这两个概念讲透后续所有内容都围绕它们展开。1. 控制反转IoCInversion of Control概念解释传统Java开发中程序员掌控对象的生命周期// 传统方式手动new对象控制创建和依赖publicclassUserService{// 手动创建依赖的UserDao对象privateUserDaouserDaonewUserDaoImpl();publicvoidgetUser(){userDao.queryUser();}}这种方式的问题对象耦合度极高——如果UserDaoImpl的构造方式变了比如需要传参数所有new它的地方都要改如果要替换UserDao的实现类比如UserDaoMysqlImpl也要逐个修改。IoC的核心是反转控制权把对象的「创建、初始化、依赖注入、销毁」全部交给Spring IoC容器管理程序员只需要「定义对象」和「声明依赖」无需手动new对象。通俗比喻传统方式你程序员亲自买菜、切菜、炒菜手动创建所有对象IoC方式你告诉餐厅Spring容器要吃什么菜声明需要的对象餐厅帮你准备好所有食材和餐具创建对象注入依赖你只需要吃使用对象就行。2. 依赖注入DIDependency Injection概念解释DI是IoC的具体实现方式当Spring容器创建一个对象比如UserService时会自动将它依赖的其他对象比如UserDao“注入”到这个对象中无需程序员手动设置。DI解决的核心问题对象之间的依赖解耦——UserService不再关心UserDao是怎么创建的只关心怎么使用它。二、Spring Core的核心组件Spring Core的核心是「IoC容器」所有功能都围绕容器展开核心组件如下1. BeanSpring容器的管理单元定义所有被Spring IoC容器管理的Java对象都叫Bean本质就是普通的POJO比如UserService、UserDao区别普通Java对象是new出来的Bean是由Spring容器创建、管理、销毁的标识通过注解Component/Service/Repository/Controller或XML配置告诉Spring“这个类要被当作Bean管理”。2. BeanFactoryIoC容器的根接口定位定义了IoC容器的最基础规范比如获取Bean、判断Bean是否存在、获取Bean类型等核心方法getBean(String beanName)根据名称获取Bean、getBean(ClassT requiredType)根据类型获取Bean特点轻量级只实现了最核心的IoC功能延迟初始化只有调用getBean()时才创建Bean实例节省内存但启动快实际开发中几乎不直接使用功能太简单。3. ApplicationContextBeanFactory的增强版实际开发首选定位BeanFactory的子接口是Spring最常用的IoC容器扩展功能相比BeanFactory立即初始化容器启动时就创建所有单例Bean启动慢但运行时响应快支持国际化、资源加载读取配置文件、事件发布/监听整合Spring AOP、事务管理等常见实现类开发中常用实现类适用场景AnnotationConfigApplicationContext基于注解配置类的容器主流ClassPathXmlApplicationContext基于XML配置文件的容器老旧项目WebApplicationContextWeb环境下的容器如Spring MVC4. BeanDefinitionBean的“定义说明书”定位Spring容器内部用来描述Bean的元数据相当于Bean的“身份证”包含信息Bean的类型、作用域、依赖对象、初始化/销毁方法等底层逻辑Spring启动时会先扫描所有Bean的定义注解/XML转换成BeanDefinition再根据BeanDefinition创建Bean实例。三、Spring Core的实际使用代码示例下面通过完整的代码示例演示Spring Core的核心用法基于注解主流方式。前置条件新建Maven项目引入Spring Core依赖如果用Spring Boot只需引入spring-boot-starter!-- 纯Spring Core依赖 --dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion6.1.2/version!-- 推荐使用稳定版 --/dependency/dependencies步骤1定义Bean声明需要被容器管理的对象// 1. 数据访问层BeanRepository是Component的衍生注解语义更明确RepositorypublicclassUserDao{publicvoidqueryUser(){System.out.println(查询用户信息);}}// 2. 业务层BeanService同理ServicepublicclassUserService{// 声明依赖需要UserDao对象privatefinalUserDaouserDao;// 推荐构造器注入Spring 4.3支持自动注入无需AutowiredpublicUserService(UserDaouserDao){this.userDaouserDao;}publicvoidgetUserInfo(){// 直接使用注入的UserDao无需newuserDao.queryUser();}}步骤2配置IoC容器告诉Spring扫描哪些包// 配置类Configuration标识这是Spring的配置类Configuration// 组件扫描告诉Spring扫描com.example包下的所有注解Service/Repository等ComponentScan(com.example)publicclassSpringConfig{// 无需额外代码扫描后Spring会自动创建Bean}步骤3启动容器并使用BeanpublicclassSpringCoreDemo{publicstaticvoidmain(String[]args){// 1. 创建ApplicationContext容器基于注解配置ApplicationContextcontextnewAnnotationConfigApplicationContext(SpringConfig.class);// 2. 从容器中获取UserService Bean两种方式// 方式1根据类型获取推荐UserServiceuserServicecontext.getBean(UserService.class);// 方式2根据名称获取默认名称是类名首字母小写如userService// UserService userService (UserService) context.getBean(userService);// 3. 使用BeanuserService.getUserInfo();// 输出查询用户信息}}依赖注入的3种方式补充上面用了构造器注入推荐另外两种方式如下ServicepublicclassUserService{// 方式1字段注入简单但不推荐不利于单元测试// Autowired// private UserDao userDao;// 方式2Setter注入适合可选依赖// private UserDao userDao;// Autowired// public void setUserDao(UserDao userDao) {// this.userDao userDao;// }// 方式3构造器注入推荐强制依赖确保对象创建时依赖已初始化privatefinalUserDaouserDao;Autowired// Spring 4.3单构造器可省略publicUserService(UserDaouserDao){this.userDaouserDao;}}四、Spring Core的核心细节1. Bean的作用域ScopeSpring允许你指定Bean的创建策略核心作用域如下默认是singleton作用域说明singleton单例默认容器中只有1个Bean实例所有请求都返回同一个对象prototype原型每次调用getBean()或注入时都创建新的Bean实例requestWeb环境每个HTTP请求创建1个Bean实例请求结束后销毁sessionWeb环境每个HTTP会话创建1个Bean实例会话结束后销毁使用方式通过Scope注解指定ServiceScope(prototype)// 原型作用域每次获取都是新实例publicclassUserService{// ...}2. Bean的生命周期核心流程Spring容器创建Bean的完整流程是理解Spring Core的关键flowchart TD A[实例化Bean]--B[属性填充DI注入依赖]B --C[初始化前BeanPostProcessor前置处理]C --D[初始化调用PostConstruct/afterPropertiesSet]D --E[初始化后BeanPostProcessor后置处理]E --F[Bean就绪可被使用]F --G[容器关闭]G --H[销毁前调用PreDestroy/destroy]H --I[销毁Bean]代码示例生命周期回调ServicepublicclassUserServiceimplementsInitializingBean,DisposableBean{privatefinalUserDaouserDao;publicUserService(UserDaouserDao){this.userDaouserDao;System.out.println(1. 构造器执行创建UserService实例);}// 初始化回调1PostConstruct注解推荐PostConstructpublicvoidinit(){System.out.println(4. PostConstruct初始化操作);}// 初始化回调2实现InitializingBean接口备选OverridepublicvoidafterPropertiesSet()throwsException{System.out.println(4. afterPropertiesSet初始化操作);}// 销毁回调1PreDestroy注解推荐PreDestroypublicvoidpreDestroy(){System.out.println(8. PreDestroy销毁前操作);}// 销毁回调2实现DisposableBean接口备选Overridepublicvoiddestroy()throwsException{System.out.println(8. destroy销毁前操作);}}3. 自定义BeanBean注解对于第三方类比如Druid数据源、RedisTemplate无法加Component注解可通过Bean手动注册BeanConfigurationpublicclassSpringConfig{// 注册第三方类为BeanBean// 方法名默认是Bean名称也可指定Bean(dataSource)publicDruidDataSourcedataSource(){DruidDataSourcedsnewDruidDataSource();ds.setUrl(jdbc:mysql://localhost:3306/test);ds.setUsername(root);ds.setPassword(123456);returnds;}}总结核心思想Spring Core的核心是IoC反转对象控制权和DI自动注入依赖彻底解耦对象创建和依赖管理核心容器ApplicationContext是实际开发的首选IoC容器增强版BeanFactory负责Bean的创建、注入、销毁核心用法通过Component/Service等注解声明Bean构造器注入实现依赖解耦ConfigurationBean管理第三方类关键细节Bean的作用域默认单例、生命周期初始化/销毁回调是理解Spring Core底层的核心。Spring Core的这些特性是所有Spring扩展框架的基础——比如Spring Boot的自动配置、Spring MVC的Controller管理本质都是基于Spring Core的IoC容器实现的。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

写资料的网站有哪些内容搜索引擎营销的概念及特点

你是否曾经面对海量数据却不知如何展示?是否在为制作专业大屏而头疼代码编写?想象一下,只需拖拽几下鼠标,就能将枯燥的数据变成震撼的可视化大屏。今天,我将带你深入了解DataRoom这款开源神器,帮你轻松玩转…

张小明 2025/12/31 10:35:37 网站建设

响水县住房建设局网站上海网站开发前十名

随着新能源技术不断进化,20 万元以内的纯电 SUV 市场已经从单纯追求续航和性价比,转向对主动安全系统表现的深度考量。对于日常高速满载出行来说,刹车响应、车道保持稳定性、自适应巡航系统表现等主动安全功能,直接关系到行驶安全…

张小明 2025/12/31 11:31:48 网站建设

本地的镇江网站建设昆明网络推广公司排名

高效文档转换利器:Dolphin智能解析工具使用指南 【免费下载链接】Dolphin 项目地址: https://gitcode.com/GitHub_Trending/dolphin33/Dolphin 在处理大量PDF文档和学术论文时,传统的复制粘贴方式耗时耗力,而Dolphin文档智能解析工具…

张小明 2025/12/31 13:26:38 网站建设

合肥网站设计品牌做烘培的网站

Origami Simulator:用WebGL技术颠覆传统折纸体验的实时模拟神器 【免费下载链接】OrigamiSimulator Realtime WebGL origami simulator 项目地址: https://gitcode.com/gh_mirrors/or/OrigamiSimulator 你是否曾经为复杂的折纸步骤而头疼?或者想要…

张小明 2026/1/1 15:38:06 网站建设

招标网站建设招标方案模板襄阳网站定制

5分钟掌握SonarQube代码质量报告生成神器:Sonar CNES Report完全指南 【免费下载链接】sonar-cnes-report Generates analysis reports from SonarQube web API. 项目地址: https://gitcode.com/gh_mirrors/so/sonar-cnes-report 想要快速生成专业的代码质量…

张小明 2025/12/31 16:01:12 网站建设

自己搭建一个网站网站地址格式

Video.js播放器如何实现进度条标记功能?5分钟掌握视频断点提示技巧 【免费下载链接】videojs-markers Displays customizable markers upon progress bars of videojs players 项目地址: https://gitcode.com/gh_mirrors/vi/videojs-markers videojs-markers…

张小明 2026/1/2 2:26:59 网站建设