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

张小明 2025/12/30 2:11:44
中国企业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进行投诉反馈,一经查实,立即删除!

教室在线设计网站策划公司起什么名字好

Background Music是一款专为macOS设计的智能音频管理工具,能够自动暂停音乐播放器当其他音频源播放,并在其他音频停止时恢复播放。这个开源项目还支持调节单个应用程序的音量和录制系统音频,无需重启即可安装使用。 【免费下载链接】Backgrou…

张小明 2025/12/28 15:56:21 网站建设

极速网站建设哪家便宜建筑人才网评职称

互联网与电子邮件使用指南 收藏夹列表的整理 在日常上网过程中,我们会将许多喜欢的网页添加到收藏夹中。随着收藏的网页增多,对收藏夹列表进行整理就显得尤为重要。通过重命名、删除一些链接,以及将其他链接移动到新文件夹,可以让我们更方便地访问喜欢的网页。 以下是整…

张小明 2025/12/28 15:55:10 网站建设

山东响应式网站建设珠海h5建站

PaddlePaddle 深度学习开发提速实战:清华源 Docker 高效部署 在人工智能项目启动阶段,最让人头疼的往往不是模型设计,而是环境配置——尤其是当你面对一个依赖庞杂的深度学习框架时。你是否经历过这样的场景:conda install padd…

张小明 2025/12/28 15:54:36 网站建设

wordpress网站维护插件网站域名怎么修改

Type Hints:Python 開發者的分水嶺前言:悄然來臨的變革2014年9月,當Guido van Rossum在Python 3.5的PEP 484提案中首次提出Type Hints概念時,鮮少有人預料到這將成為Python生態系統中一場靜默的革命。七年後的今天,Typ…

张小明 2025/12/28 15:54:00 网站建设

怎么注册17做网站建设网站出现400错误

第一章:Open-AutoGLM 日志查询权限管控在 Open-AutoGLM 系统中,日志查询功能涉及敏感操作记录与用户行为追踪,因此必须实施严格的权限控制机制,以防止未授权访问和数据泄露。系统采用基于角色的访问控制(RBAC&#xff…

张小明 2025/12/28 15:52:47 网站建设

上海信息技术做网站网站建设软件 优帮云

COBOL编程入门:从基础到文件处理 在银行核心系统的一次深夜故障排查中,运维团队发现一笔关键交易未能入账。经过层层追踪,问题最终指向一段运行了三十年的薪资计算逻辑——代码依然健壮,但能读懂它的人却越来越少。这正是COBOL的真…

张小明 2025/12/28 15:52:11 网站建设