网站搭建书籍推荐网站建设核心点

张小明 2026/1/2 0:21:06
网站搭建书籍推荐,网站建设核心点,乐清市网站建设,线上网站制作文章目录Ⅰ. 什么是 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进行投诉反馈,一经查实,立即删除!

建筑网校哪个比较好seo咨询

DDD破冰入门:从医院分诊看懂复杂系统设计逻辑“这个转赠功能要实现订单拆分,但不能影响主订单的支付状态”——这样的需求描述,是不是常让你在评审会上陷入沉默?业务专家口中的“履约权限”,产品经理画的原型图&#x…

张小明 2025/12/27 5:37:18 网站建设

企业网站需要的模块北京网络安全公司排名

以下是全国范围内主要和知名的省级及国家级网络安全大赛的梳理,你可以根据自身情况选择参加。一、 国家级综合赛事(通常下设省赛区)这些大赛影响力最大,覆盖面最广,通常先举办省赛选拔,优胜者进入全国总决赛…

张小明 2026/1/1 18:27:40 网站建设

跨境电商平台有哪些?网站seo数据分析

第一章:为什么你的AutoGLM模型在移动端跑不起来?许多开发者在尝试将AutoGLM模型部署到移动端时,常常遇到性能瓶颈、内存溢出或框架兼容性问题。这些问题并非源于模型本身的设计缺陷,而是由于移动端的硬件限制与推理引擎适配不当所…

张小明 2025/12/27 5:37:18 网站建设

班级介绍网站首页如何做好的宠物网站模板

传输层协议详解:TCP、UDP与服务质量保障 1. 传输层概述 传输层是TCP/IP协议栈中的端到端层,其目标是以最低成本尽可能为应用层提供所需的服务质量(QoS)。为实现这一功能,传输层需在应用层请求的QoS参数和网络层可用的QoS之间进行权衡,其中网络层的QoS是瞬时流量的函数。…

张小明 2025/12/31 7:41:39 网站建设

新手做视频网站建设局的证件在哪个网站查

TinyML技术深度解析:从边缘计算到智能终端的终极指南 【免费下载链接】tinyml 项目地址: https://gitcode.com/gh_mirrors/ti/tinyml 在人工智能技术快速发展的今天,一个革命性的趋势正在悄然改变着我们对计算能力的认知——TinyML技术正在将强大…

张小明 2025/12/27 5:37:22 网站建设

洪梅镇网站建设石家庄网站建设系统

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/27 5:37:21 网站建设