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

网站管理是做什么的网站建设 小白

网站管理是做什么的,网站建设 小白,网站设计大概流程,网站源码asp什么是Spring Bean 简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。 将一个类声明为 Bean 的注解有哪些? Com…

什么是Spring Bean

简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。

将一个类声明为 Bean 的注解有哪些?

  • @Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
  • @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

注入Bean的注解有哪些

Spring 内置的 @Autowired 以及 JDK 内置的 @Resource@Inject 都可以用于注入 Bean。一般使用@Autowired@Resource

@Autowired@Resource区别

  • @Autowired 是 Spring 提供的注解,@Resource 是 JDK 提供的注解。
  • @Autowired默认注入方式是byType(根据类型匹配),@Resource 默认注入方式为byName(根据名称进行匹配)
  • 当一个接口存在多个实现类的情况下,@Autowired@Resource都需要通过名称才能正确匹配到对应的 Bean。Autowired 可以通过 @Qualifier 注解来显式指定名称,@Resource可以通过 name 属性来显式指定名称。
  • @Autowired 支持在构造函数、方法、字段和参数上使用。@Resource 主要用于字段和方法上的注入,不支持在构造函数或参数上使用。

Spring框架中的单例bean是线程安全的吗?

并非是线程安全的。

当多个用户请求同一个服务时,容器会给每一个请求分配一个线程。这时多个线程会并发执行该请求对应的成员方法。如果该处理逻辑中有对该例状态的修改,则必须考虑线程同步问题。由于Spring框架并没有对bean进行任何多线程的封装处理,关于单例bean的线程安全和并发问题需要开发者自行解决。

通常在项目中使用的spring bean都是不可变状态,所以在某种程度上说,Spring的单例bean是线程安全的。

但是如果bean有多种状态的话,可以通过加锁或者将bean改为多例解决,即将注释“@singleton”更改为“@prototype"。

手写单例

单例实现方式主要有三种

饿汉式

public class Singleton {private static Singleton uniqueInstance;public Singleton(){}public static Singleton getUniqueInstance() {if (uniqueInstance == null){synchronized (Singleton.class){if (uniqueInstance == null){uniqueInstance = new Singleton();}}}return uniqueInstance;}
}
  • 先不创建实例,当第一次被调用时,再创建实例,所以被称为懒汉式。
  • 延迟了实例化,如果不需要使用该类,就不会被实例化,节约了系统资源。

饿汉式

public class Singleton {private static volatile Singleton uniqueInstance = new Singleton();public Singleton(){}public static Singleton getUniqueInstance() {return uniqueInstance;}
}
  • 直接先实例化好实例 (饿死鬼一样,所以称为饿汉式),然后当需要使用的时候,直接调方法就可以使用了。
  • 优点: 提前实例化好了一个实例,避免了线程不安全问题的出现。
  • 缺点: 直接实例化好了实例,不再延迟实例化;若系统没有使用这个实例,或者系统运行很久之后才需要使用这个实例,都会操作系统的资源浪费。

双重检查锁实现(线程安全)DCL

public class Singleton {private static volatile Singleton uniqueInstance;public Singleton(){}public static Singleton getUniqueInstance() {if (uniqueInstance == null){synchronized (Singleton.class){if (uniqueInstance == null){uniqueInstance = new Singleton();}}}return uniqueInstance;}
}

Spring的bean的生命周期

  1. 通过BeanDefinition获取bean的定义信息
  2. 调用构造函数实例化bean
  3. bean的依赖注入
  4. 处理Aware接口(BeanNameAware、BeanFactoryAware、ApplicationContextAware)
  5. Bean的后置处理器BeanPostProcessor-前置
  6. 初始化方法(InitializingBean、init-method)
  7. Bean的后置处理器BeanPostProcessor-后置
    在这里插入图片描述
BeanDefinition

Spring容器在进行实例化时,会将xml配置的的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性来表述Bean。

  • beanClassName: bean的类名
  • initMethodName: 初始化方法名称
  • properryValues: bean 的属性值
  • scope: 作用域
  • lazyInit: 延迟初始化

什么是AOP,你们项目中是否使用到AOP?

AOP称为面向切面编程,用于将与业务无关,但是对多个对象产生影响的公共行为和逻辑进行抽取和封装,形成一个可重用的模块,这个模块被命名为"切面"(Aspect)。可以减少系统中的重复代码,降低模块间的耦合度,同时提高了系统的可维护性。

术语含义
目标 Target被通知的对象
代理 Proxy向目标对象应用通知之后创建的代理对象
连接点 JoinPoint目标对象的所属类,定义的所有方法均为连接点
切入点 Pointcut被切面拦截/增强的连接点
通知 Advice拦截到目标对象的连接点后要做的事情
切面切入点+通知
织入 Weaving将通知应用到目标对象,进而生成代理对象的过程操作

常见AOP使用场景:

  • 记录操作日志
  • 缓存处理
  • Spring中内置的事务处理

项目中有没有使用到AOP

记录操作日志

核心是使用AOP中的环绕通知+切点表达式(找到要记录日志的方法),通过环绕通知的参数获取请求方法的参数(类、方法、注解、请求方式等),获取这些参数后,保存到数据库。

Spring中的事务如何实现

其本质是通过AOP功能,对方法前后进行拦截,在执行方法之前开启事务,在执行完目标方法后,根据执行情况提交或回滚事务。

Spring中事务失效的场景

  1. 异常捕获处理
  • 原因:事务通知只有捕捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉。
  • 解决:在catch块中添加throw new RuntimeException(e) 抛出
  1. 抛出检查异常
  • 原因:Spring只会默认回滚非检查异常
  • 解决:配置rollbackFor属性,使得Spring回滚所有抛出异常
@Transactional(rollbackFor=Exception.class)
  1. 非public方法导致事务失效
  • 原因:Spring为方法创建代理、添加事务通知、前提条件都是该方法是public的
  • 解决:将方法改为public

Spring中的循环引用

  • 循环依赖:循环依赖即循环引用,也就是两个或以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A
  • 循环依赖在spring中是允许存在的,spring框架根据三级缓存已经解决了大部分的循环依赖
  1. 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的Bean对象
  2. 二级缓存:缓存早期的bean对象(生命周期还没走完)
  3. 三级缓存:缓存的是ObjectFactory,表示对象工厂,用于创建某个对象的代理对象。产生的代理对象同意存入二级缓存,需要使用时再取出
    在这里插入图片描述

构造方法出现循环依赖怎么解决

循环依赖的注入方式是构造函数
原因: 由于bean对象的生命周期中构造函数是第一个执行的,spring框架并不能解决构造函数的依赖注入
解决方法:使用@lazy进行懒加载,什么时候需要对象再进行bean对象的创建

public A(@Lazy B){System.out.println("A的构造方法执行完成");this.b = b;}

SpringMVC是什么

MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。

Spring MVC 的核心组件有哪些?

  • DispatcherServlet核心的中央处理器,负责接收请求、分发,并给予客户端响应。
  • HandlerMapping处理器映射器,根据 URL 去匹配查找能处理的 Handler ,并会将请求涉及到的拦截器和 Handler 一起封装。
  • HandlerAdapter:处理器适配器,根据 HandlerMapping 找到的 Handler ,适配执行对应的 Handler
  • Handler:请求处理器,处理实际请求的处理器。
  • ViewResolver:视图解析器,根据 Handler 返回的逻辑视图 / 视图,解析并渲染真正的视图,并传递给 DispatcherServlet 响应客户端

SpringMVC的执行流程

  1. 用户发出请求到中央处理器DispatcherServlet
  2. DispatcherServlet收到请求调用处理器映射器(HandlerMapping)
  3. HandlerMapping找到jurisdiction的处理器,生成处理器对象及处理器拦截器(如果存在),再一起返回给DispatcherServlet
  4. DispatcherServlet调用处理器适配器(HandlerAdapter)
  5. HandlerAdapter经过适配器调用具体的处理器(Handler/Controller)
  6. 方法上添加@ResponseBody
  7. 通过HttpMessageConverter来返回结果转换为json并响应。
    在这里插入图片描述

Springboot自动配置原理

  1. 在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行封装,分别是:
  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan
  1. 其中@EnableAutoConfiguration是实现自动化配置的核心注解。该注解通过@Import注解导入对应的配置选择器。内部就是读取了该项目和该项目引用的Jar包的classpath路径下META-INF/spring.factories文件中的所有配置的类的全类名。在这些配置类中所定义的Bean会根据条件注释所指定的条件来决定是否需要将其导入到Spring容器中。
  2. 条件判断会有@ConditionalOnClass这样的注解,判断是否有对应的class文件。如果有则加载该类,把这个配置类的所有Bean放入spring容器中使用。

SpringMVC常见的注解

在这里插入图片描述

SpringBoot常见的注解

在这里插入图片描述

http://www.yayakq.cn/news/208511/

相关文章:

  • 重庆网站建站价格小程序设计案例
  • 网站开发模版网站开发用什么软件开发
  • 江苏专业网站推广公司哪家好免费推广方式
  • 福建祥盛建设有限公司网站深圳定制网站
  • 经典网站设计智能建造师证书
  • 医院的网站关键词定位一般是什么商业中心 网站建设
  • 网站建设技巧亅金手指排名27北京哪家公司做网站
  • 网站建设万首先金手指12福田我要做网站优化比较好
  • 网站点赞怎么做零基础学习做网站
  • 网站排名西安网站建设服务范围
  • 三视觉设计网站家在深圳坪山
  • 公司的网站建设做什么费用wordpress注册协议
  • 注册网站大全财务管理培训
  • 移动网站建设的基本流程图网站优化排名查询
  • 龙华企业网站建设建筑设计公司经营范围
  • 织梦如何一个后台做两个网站班玛县公司网站建设
  • 企业网站尺寸哈尔滨专业建网站方案
  • 中牟高端网站建设电商运营要学多久
  • 网站建设静态部分总结石家庄有哪些大型互联网公司
  • 松江网站开发培训学校外贸网站服务器选择
  • 网站建设的一般步骤包括成都网站建设scdzks
  • 个人网站设计及实现论文易语言怎么做无限打开网站
  • 全球最大的网站建设外包网能看的网站给我一个呗
  • 金融公司 网站开发莱芜百姓网
  • 网站建设公司在哪里做海岛旅游预定网站的
  • 论坛与网站做优化哪个更好湖南备案网站建设方案书
  • 内蒙古网站开发公司中国建筑网官网图片
  • 企业的网站建设前期工作总结百度的特点和优势
  • 山东网站建设开发龙华龙岗光明最新通告
  • 做3个网站需要多大的服务器免费开发网站