自己做网站有何意义官方网站弹幕怎么做

张小明 2026/1/3 0:24:47
自己做网站有何意义,官方网站弹幕怎么做,经典 网站,网站开发一般过程文章目录Ⅰ. 什么是 IOC 和 DI❓❓❓Ⅱ. 五大注解Ⅲ. 注解 BeanⅣ. 扫描路径 ComponentScanⅤ. 依赖注入一、三种注入方式 Autowired① 属性注入② 构造方法注入③ Setter方法注入三种注入方式的区别二、Autowired 存在的问题① Primary② Qualifier③ Resource⭐⭐⭐Ⅰ. 什么是…文章目录Ⅰ. 什么是 IOC 和 DI❓❓❓Ⅱ. 五大注解Ⅲ. 注解 BeanⅣ. 扫描路径 ComponentScanⅤ. 依赖注入一、三种注入方式 Autowired① 属性注入② 构造方法注入③ Setter方法注入三种注入方式的区别二、Autowired 存在的问题① Primary② Qualifier③ Resource⭐⭐⭐Ⅰ. 什么是IOC和DI❓❓❓IOC全称是Inversion of Control中文叫 “控制反转”。简单的说就是把对象的创建和依赖关系的维护交给框架管理而不是自己在代码中new出来。IOC是一种设计思想而注解DI是实现IOC的方式之一。IOC的好处如下所示优点说明解耦组件之间不直接 new依赖由框架注入易测试方便用 mock 对象进行单元测试灵活替换想换实现类只改配置或注解不改业务代码更清晰的架构各层职责分明依赖关系可视化此外Spring容器管理的对象称为Bean对象。Component和Autowired是Spring框架中非常核心的两个注解是实现IOC控制反转和DI依赖注入的关键工具。Component一个类级注解用于将普通的Java类声明为Spring管理的Bean。Autowired一个非类级注解用于自动注入依赖对象而无需手动new。如何从Spring容器中获取对象❓❓❓可以从ApplicationContext中的getBean()方法获取如下所示publicstaticvoidmain(String[]args){// 在启动类中拿到ApplicationContext对象ApplicationContextcontextSpringApplication.run(Application.class,args);// 第一种传参方式UserComponentbean1context.getBean(UserComponent.class);bean1.func();// 第二种传参方式需要强转UserConfigbean2(UserConfig)context.getBean(userConfig);bean2.func();}而getBean()方法实际上是ApplicationContext是实现了BeanFactory接口得到的并且在其基础上添加了对国际化支持、资源访问支持、以及事件传播等方面的支持 此外getBean()对于Bean的名称约定如下所示以小写字母开头然后使用小驼峰的格式。如类名为UserController则Bean名为userController。特殊情况当第一个和第二个字母为大写时则保留原始的大小写。如类名为UController则Bean名为UController。Ⅱ. 五大注解注解作用常见使用位置Component通用组件标识该类为Bean工具类、业务组件Controller控制层接收前端请求MVC控制器类Service业务逻辑层Service类Repository数据持久层DAO类MyBatis MapperConfiguration配置类用于代替XML配置常见的目录结构规范如下所示src └── main └── java └── com.example.project ├── controller # 控制器层Controller/RestController ├── service # 业务逻辑层Service ├── dao/mapper # 数据访问层Repository/Mapper ├── model/entity # 实体类POJO/DTO/DO/VO └── config # 配置类Configuration注意五大注解均可以起别名Ⅲ. 注解BeanBean告诉spring这个方法返回的对象要放进IoC容器ApplicationContext里成为可被任何其他Bean注入的组件。注意事项Bean要配合五大注解使用不能单独使用在Spring中默认情况下Bean的作用域是singleton单例的即整个Spring容器中只存在一个该Bean实例。对于同一个类要定义多个Bean对象的话需要对不同的方法进行注解然后使用ApplicationContext对象的getBean()方法中传入Bean名称的方式进行获取对应的Bean名称是对应方法的名称当然也可以进行重命名默认重命名的属性是name如下所示ComponentpublicclassUserComponent{Bean({u3})publicUseru1(){returnnewUser();}BeanpublicUseru2(){returnnewUser();}}publicstaticvoidmain(String[]args){ApplicationContextcontextSpringApplication.run(Application.class,args);// 通过 Bean 名获取不然 Spring 会报错识别不出要哪个对象// 并且可以对 Bean 对象进行重命名Useru1(User)context.getBean(u3);Useru2(User)context.getBean(u2);System.out.println(u1);System.out.println(u2);}// 运行结果com.liren.ioc.model.Userabbe000com.liren.ioc.model.User3f81621cⅣ. 扫描路径ComponentScanSpring默认扫描的范围是SpringBoot启动类所在包及其子包如下图所示一般也推荐直接把启动类放到项目目录中但是如果需要放在特定包内还需要访问其它非子包的包内则需要使用ComponentScan来添加要扫描的包如下所示当然也可以用{}配置多个包路径ComponentScan(com.liren.ioc.service)// 指定扫描com.liren.ioc.service包中的内容SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}Ⅴ. 依赖注入一、三种注入方式Autowired① 属性注入这种方式虽然不是官方最推荐的但却是日常开发最常用的。ControllerpublicclassUserController{AutowiredprivateUserServiceuserService;publicvoidfunc(){System.out.println(UserController);userService.func();}}② 构造方法注入注意如果类只有一个构造方法那么Autowired注解可以省略如果类中有多个构造方法那么需要添加上Autowired来明确指定到底使用哪个构造方法。ControllerpublicclassUserController{privateUserServiceuserService;// 默认构造方法publicUserController(){}// 如果有默认构造方法那么不显式写上Autowired的话会去调用默认构造方法AutowiredpublicUserController(UserServiceuserService){this.userServiceuserService;}publicvoidfunc(){System.out.println(UserController);userService.func();}}③Setter方法注入ControllerpublicclassUserController{privateUserServiceuserService;AutowiredpublicvoidsetUserService(UserServiceuserService){this.userServiceuserService;}publicvoidfunc(){System.out.println(UserController);userService.func();}}三种注入方式的区别属性注入优点简洁使用方便缺点只能用于IOC容器如果是非IOC容器不可用并且只有在使用的时候才会出现空指针异常不能注入一个Final修饰的属性构造函数注入Spring 4.X 推荐优点可以注入final修饰的属性注入的对象不会被修改依赖对象在使用前一定会被完全初始化因为依赖是在类的构造方法中执行的而构造方法是在类加载阶段就会执行的方法。通用性好构造方法是JDK支持的所以更换任何框架它都是适用的缺点注入多个对象时代码会比较繁琐Setter 注入Spring 3.X 推荐优点方便在类实例之后重新对该对象进行配置或者注入缺点不能注入一个final修饰的属性注入对象可能会被改变因为setter方法可能会被多次调用就有被修改的风险二、Autowired存在的问题当同一个类存在多个Bean时使用Autowired会存在问题如下所示如何解决上述问题呢❓❓❓Spring提供了以下几种解决方案PrimaryQualifierResource①Primary当存在多个相同类型的Bean注入时加上Primary注解来确定默认的实现这个注解加在要被指定注入的Bean对象上如下所示ComponentpublicclassUserComponent{PrimaryBeanpublicUseru3(){returnnewUser();}BeanpublicUseru4(){returnnewUser();}}②Qualifier注意该注解不能单独使用需要配合Autowired才行ControllerpublicclassUserController2{Qualifier(u3)// 指定对应Bean的名称AutowiredprivateUseruser;publicvoidfunc(){System.out.println(UserController2);}}③Resource⭐⭐⭐该注解可以单独使用不过需要显式用属性name来指定对应的Bean对象ControllerpublicclassUserController2{Resource(nameu3)// 需要显式写一下name来指定privateUseruser;publicvoidfunc(){System.out.println(UserController2);}}需要注意的是Resource是JDK自带的支持更多的参数设置而Autowired是Spring框架提供的没有前者功能那么多Autowired的装配顺序如下图所示
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

美食城网站建设策划书小程序制作需求文档

影响 266 nm 皮秒紫外激光器种子源(1064 nm)功率稳定性 的关键因素涉及多个子系统,其中你提到的 水冷机、零气模块(CDA)、功率计 都是重要的外部支撑或监测设备。下面我们从系统工程角度,系统性地分析这些设…

张小明 2025/12/27 13:46:48 网站建设

手机和wap网站建设延边延吉网站建设

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 解决面板默认安装导致系统盘爆满的实战方案 📒 📝 为什么快照备份无法解决问题? 📝 快速无损迁移方案(✅ 附一键脚本) 1. 确认数据盘挂载点 2. 手动操作步骤(理解原理) 3. 🚀 一键迁移脚本 📝 方案优势总结 ⚓…

张小明 2026/1/2 17:01:05 网站建设

购物商场网站开发过程详细说明正能量直播网站

在数字视觉设计领域,纯色壁纸因其简洁性与适配性被广泛应用于各类设备界面。然而,用户常面临两个核心问题:如何快速生成符合视觉美学的纯色背景,以及如何基于科学理论选择最优配色方案?本文将系统介绍一款基于色彩科学…

张小明 2025/12/28 14:11:00 网站建设

c 鲜花店网站建设设计公司logo图标

深入拆解CP2102供电设计:如何避开90%工程师踩过的“上电即死”坑?你有没有遇到过这样的场景?手里的CP2102模块插上电脑,USB灯闪了一下就灭了,设备管理器里跳出一个感叹号——“未知设备”。拔下来再插,有时…

张小明 2025/12/29 1:58:26 网站建设

北京网站开发公司哪家好成都知名网站推广

9 个毕业答辩PPT工具,本科生AI降重推荐 论文写作的“战场”,你真的准备好了吗? 对于大多数本科生来说,毕业答辩不仅是大学生活的终点,更是人生中一次重要的“闯关”。而在这场“闯关”中,最让人头疼的莫过于…

张小明 2026/1/2 2:14:58 网站建设

原油可以取什么做标题发网站app怎么推广

你是否曾经在网易云音乐下载了心爱的歌曲,却发现只能在特定客户端播放?这种名为NCM的加密格式限制了我们欣赏音乐的便利性。今天,我将为你揭示一个简单高效的解决方案,让你摆脱格式限制,实现音乐自由播放。 【免费下载…

张小明 2025/12/29 1:58:34 网站建设