当前位置: 首页 > news >正文

官方网站建设必要性gucci网站

官方网站建设必要性,gucci网站,iis网站防盗链,买卖交易平台文章目录 1、Bean方法注解简介2、Bean注解重命名3、对象装配#xff08;获取Bean对象#xff09;3.1 对象装配之属性注入3.2 对象装配之Set 注入3.3 对象装配之构造方法注入 4、Resource VS Autowired5、Bean对象的作用域5.1 验证Bean对象的默认作用域5.2 Bean对象的六大作用… 文章目录 1、Bean方法注解简介2、Bean注解重命名3、对象装配获取Bean对象3.1 对象装配之属性注入3.2 对象装配之Set 注入3.3 对象装配之构造方法注入 4、Resource VS Autowired5、Bean对象的作用域5.1 验证Bean对象的默认作用域5.2 Bean对象的六大作用域详解5.3 Scope注解设置Bean对象作用域 6、Spring执行流程7、Bean生命周期 1、Bean方法注解简介 上一节我们介绍了五大类注解这一节介绍方法注解BeanBean作用的对象是方法该注解需要搭配五大类注解同时进行使用因为类方法的数量远远大于类的数量如果使用Bean注解标记方法的类没有被标记那么Spring Boot项目在启动时需要遍历所有的类的所有方法开销无疑是巨大的但如果只遍历用五大类注解标记的类的方法无疑大大减小了遍历范围 2、Bean注解重命名 Bean 类注解默认情况下Bean name 方法名但是方法名是非常容易重复的很可能在两个类中有两个相同的方法它们通过方法类注解返回同一个类的对象若这两个对象内部属性不相同则可能出现误调的情况本想调用A类的student方法返回名为张三的学生的结果调用成B类的student方法返回了一个名为李四的学生 并且这种错误并不会引起报错一旦出现错误非常难以排查问题而针对上述问题可以通过给Bean设置name属性获取对象 Controller public class StudentBeans {Bean(name {s1, s2})public Student student() {// 伪代码构建对象Student stu new Student();stu.setId(1);stu.setName(张三);stu.setAge(18);return stu;} }注当给一个Bean设置了name属性后就无法使用方法名获取Bean对象了只能通过设置的名称获取 3、对象装配获取Bean对象 获取Bean对象也叫做对象装配就是把注入到Spring Boot中的某个对象取出来取出来放到指定类中这种方法也叫做对象注入对象装配的方法有三种接下来将详细介绍 3.1 对象装配之属性注入 属性注入是使用Autowired 来实现的将Service类注入到Controller类中 优点使用简单缺点 1、功能性问题: 无法注入一个不可变对象final对象2、通用型问题只能适应于IoC容器3、设计原则问题更容易违背单一设计原则 属性注入实例 将StudentService对象注入到StudentController类中 package com.demo.controller;import com.demo.service.StudentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller;Controller public class StudentController {Autowiredprivate StudentService studentService;public void sayHi() {studentService.sayHi();} } package com.demo.service; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Service;Service public class StudentService {public void sayHi() {System.out.println(StudentService sayHi);} }接下来来介绍属性注入的缺点 1、功能性问题无法注入final对象。首先这个应该是jdk的问题而并非spring的问题final修饰的变量不可被改变一旦获取了初始值就不能重新被赋值如果在类中使用final属性的成员要么直接赋值要么在构造函数中赋值 private StudentService studentService; // 添加final关键字无法赋值private final int number; // 报错必须要直接进行赋值,或者写一个构造函数在构造函数中赋值 2、通用性问题只能适用于IoC容器 3、设计原则问题更容易违背单一设计原则 3.2 对象装配之Set 注入 完全符合单一设计原则每一个Setter方法只针对一个对象但是它的缺点也很明显不能注入不可变对象注入的对象可以被任意修改 使用方法 // 2、Setter注入private StudentService studentService;Autowiredpublic void setStudentService(StudentService studentService) {this.studentService studentService;}3.3 对象装配之构造方法注入 Spring Boot 官方推荐的用法如果当前类中只有一个构造方法那么Autowired注解可以省略 基本使用方法 // 3、构造方法注入private StudentService studentService;public StudentController(StudentService studentService) {this.studentService studentService;}构造方法注入的优点 1.可注入不可变对象不可变对象可以在构造函数中初始化 2.注入对象不会被修改:构造方法在对象创建时只会执行一次因此它不存在注入对象被随时调用修改的情况 3.注入对象会被完全初始化 4.通用性更好:构造方法注入可适用于任何环境无论是 IoC 框架还是非 IoC 框架构造方法注入的代码都是通用的所以它的通用性更好。 4、Resource VS Autowired 功能两者都是用来实现依赖注入的功能非常相近 Resource 和 Autowired 的区别 出身不同Autowired来自于Spring而Resource来自于JDK的注解使用时设置的参数不同相比于Autowired来说Resource支持更多的参数设置例如name设置根据名称获取BeanAutowired可以用于Setter注入构造函数注入属性注入而Resource只能用于Setter注入和属性注入不能用于构造函数注入 由于Autowired支持的参数设置很少所以产生了Qualifier注解来扩充Autowired 组件的功能 场景使用Bean注解向Spring中注入两个Student对象当我们想要从Spring中取出对象注入到其他对象中时Spring就会不确定到底使用哪一个对象 package com.demo.componect; import com.demo.model.Student; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Controller;Controller public class StudentBeans {Bean(name {s1, s2})public Student student1() {// 伪代码构建对象Student stu new Student();stu.setId(1);stu.setName(张三);stu.setAge(18);return stu;}Beanpublic Student student2() {Student stu new Student();stu.setId(2);stu.setName(李四);stu.setAge(20);return stu;} } Resource 解决方式 可以根据Bean注解时设置的名称来确定应该调用哪个Bean注解标记的方法来获取指定对象 Resource(name s1)private Student student; Autowired 解决方式 可以根据 注入方法名 对象名称的方式来获取对象不推荐 Autowiredprivate Student student2 使用Qualifier注解可以对获取对象的方法进行筛选 AutowiredQualifier(student2)private Student student;5、Bean对象的作用域 作用域是Bean对象在整个Spring框架项目中的某种行为模式,Bean对象默认情况下是单例状态singleton也就是所有人使用的都是同一个Bean对象所以Spring中的Bean的作用域默认也是单例模式singleton 5.1 验证Bean对象的默认作用域 示例 Controller public class UserController {Autowiredprivate User user1;public void getUser() {System.out.println(User1: user1);User u user1;u.setName(李四);System.out.println(u: u);} } Controller public class UserAdviceController {Resourceprivate User user1;public void getUser() {System.out.println(王五 | user1: user1);} UserController uc context.getBean(userController, UserController.class);uc.getUser();UserAdviceController ua context.getBean(userAdviceController, UserAdviceController.class);ua.getUser();输出 User1:User(id1, name张三, password15157722660) u:User(id1, name李四, password15157722660) 王武 | user1: User(id1, name李四, password15157722660)可以看到不管是通过创建局部变量还是重新装配获取到的都是同一个Bean对象这说明Bean对象全局只有一份这个对象是一个单例 5.2 Bean对象的六大作用域详解 Spring容器在初始化Bean实例时同时会指定该实例的作用域Spring有6种作用域最后四种是基于Spring MVC生效的 1、singleton : 单例作用域Spring默认选择该作用域IOC容器中只存在一个实例 使用场景通常无状态Bean使用 该作用域即Bean对象的属性状态无需更新对象不会被改变 2、prototype 原型作用域多例作用域每次对该作用域下的Bean的请求都会创建新的实例 使用场景通常有状态的Bean使用该作用域 3、request请求作用域每次Http请求会创建新的Bean实例类似于prototype 使用场景一次http的请求和响应的共享Bean限定SpringMVC中使用 4、session会话作用域在一个http session中定义一个Bean实例 使用场景用户回话的共享Bean比如记录一个用户的登录信息限定SpringMVC种使用 5、application全局作用域在一个http servlet Context中定义一个Bean实例。即一个context对象使用getBean获取类得到的是同一个实例 使用场景Web应用的上下文信息比如记录一个应用的共享信息限定SpringMVC中使用 6、websocket在一个HTTP WebSocket的生命周期中定义一个Bean实例 使用场景WebSocket的每次会话中保存一个Map结构的头信息包裹客户端消息头。第一次初始化后直到WebSocket结束都是用的同一个Bean限定Spring WebSocket中使用 单例作用域singleton vs 全局作用域application singleton是Spring Core的作用域 application 是Spring Web中的作用域singleton作用域IoC容器而application作用域Servlet容器 5.3 Scope注解设置Bean对象作用域 Scope标签可以用来声明Bean的作用域比如设置Bean的作用域如下代码所示 Data Controller public class UserBeans {// 方法1:// Scope(prototype)// 方法2:Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)Beanpublic User user1() {User user new User();user.setName(张三);user.setId(1);user.setPassword(15157722660);return user;} }6、Spring执行流程 7、Bean生命周期 所谓生命周期指的是一个对象从诞生到销毁的整个生命过程我们将这一过程叫做一个Bean对象的生命周期 实例化Bean将字节码转换成内存中的对象即加载为Bean分配内存空间 设置属性Bena注入和装配 Bean初始化实现了各种Aware通知方法如BeanPostProcessor注解初始化前置方法PostConstruct xml初始化方法依赖注入后被执行 使用Bean对象 销毁Bean对象
http://www.sadfv.cn/news/146892/

相关文章:

  • 站长工具 站长之家做网站优化如何写方案
  • 杭州企业建设网站企业商户后台管理系统
  • 企业网站首页应如何布局网站想上线怎么做
  • cc0图片素材网站seo入门课程
  • 包装设计说明模板佛山优化网站推广
  • 企业网站快速优化排名asp.net网站开发四酷全书
  • 做催收的网站南京网站制作费用
  • 博罗县建设局网站阿里云代理网站怎么做
  • 蓝色中网站网站建设是不是无形资产
  • 苏州相城做网站哪家好前端做视频直播网站
  • 中文网站建设技术wordpress引导页
  • 网站制做工具app制作需要学什么
  • 移动端高端网站开发南京市网站建设公司
  • 怎样用自己的pid做搜索网站教你免费申请个人平台
  • 优化网站价格寮步营销型网站建设价格
  • 桐乡做网站的公司动漫人物做羞羞事的网站
  • 网站开发简述类型: 营销型网站建设
  • 网站建设及推广套餐义乌app制作公司
  • 做网站彩票代理多少钱啊哪个网站做ic外单好
  • 哪里免费做网站深圳企业建站模板
  • 江苏亿之盛建设有限公司网站wordpress域名空间
  • 中国电信新建网站备案管理系统 录完信息jsp网站开发详解下载
  • 建网站做seoWordPress禁止下载
  • 如何设置网站名字吗app开发者需要更新此app怎么解决
  • 有什么做动图比较方便的网站wordpress菜单与顶部互换
  • 做设计用哪个素材网站做网站的合作案例
  • 南昌企业建站系统模板云商城之歌
  • 网站的模板演示怎么做湖南建设监理员报名网站
  • 站外推广方式有哪些wordpress文章参数
  • 莱芜网站seo系统那个网站免费