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

潍坊优化网站排名合肥集团网站建设公司

潍坊优化网站排名,合肥集团网站建设公司,城乡建设部网站首页上海,网站域名空间管理IOC容器#xff0c;AOP IOC #xff1a;依赖反转#xff0c;将对象的创建#xff0c;组装#xff0c;管理的控制权限从应用程序反转到IOC容器中。由springboot的来实现对象的自动装配和注入。 当某个类使用了Componnet 注解后#xff0c;标记为一个组件。那么这个类在项…IOC容器AOP IOC 依赖反转将对象的创建组装管理的控制权限从应用程序反转到IOC容器中。由springboot的来实现对象的自动装配和注入。 当某个类使用了Componnet 注解后标记为一个组件。那么这个类在项目启动的时候会自动执行Bean装配生成一个Bean对象到依赖池中。当在其他的类中使用了Auotwired 注解后会执行bean加载依赖注入将依赖池中的对象拿出来。IOC装配·Bean 的详细流程为 创建一个BeanFactory 加载配置文件。根据配置文件创建BeanDefination 对象。将BeanDefination 对象注册到 Bean工厂中 根具 BeanDefination 信息进行Bean实例化得到空的Bean 实例。使用Auotwired 自动将依赖注入到Bean实例中。进行Bean的初始化得到可用的bean实例检查依赖关系添加到依赖池中。 AOP 面向切面编程。 在不修改原来的代码的基础上在目标方法中增加新的功能或者拦截原有的功能实现。解决代码的耦合度与代码复用的问题。 底层使用了JDKCGLIB的动态代理方式实现。定义切面 首先的定义i一个切面类使用Component 、Aspect 注解。Pointcut 在切面中定义一个切入点定位到想要去拦截或添加功能的位置方法上。Before :定义切入点到目标方法执行前的方法。AfterReturning 目标方法执行无异常结束后执行。After :目标方法执行出现异常后执行AfterThrowing 目标方法出现异常时执行的方法Around ():环绕通知使用rtry-catc的方法实现方法的执行前后的通知。最后使用切点定位目标方法的过程叫做织入会生成一个代理对象执行切面的方法。 /*** 切⾯ * 切⼊点和通知的抽象 与⾯向对象中的 类 相似 * 定义 切⼊点和通知 切⼊点定义了要拦截哪些类的哪些⽅法通知则定义了拦截过⽅法后要做什么 */Component // 将对象交给IOC容器去实例化 Aspect // 声明当前类是⼀个切⾯ public class LogCut {/*** * * 切⼊点 匹配规则。规定什么⽅法被拦截、需要处理什么⽅法 定义切⼊点 * Pointcut(匹配规则)** Aop 切⼊点表达式简介 * 1. 执⾏任意公共⽅法 * execution(public *(..))* 2. 执⾏任意的set⽅法 * execution(* set*(..))* * 3. 执⾏com.xxxx.service包下任意类的任意⽅法 execution(* com.xxxx.service.*.*(..)) * 4. 执⾏com.xxxx.service 包 以及⼦包下任意类的任意⽅法 * execution(* com.xxxx.service..*.*(..))** * 注表达式中的第⼀个* 代表的是⽅法的修饰范围 可选值private、protected、public * 表示所有范围 */Pointcut(execution (* com.xxxx.service..*.*(..) ))public void cut(){}/*** 声明前置通知 并将通知应⽤到定义的切⼊点上 * ⽬标类⽅法执⾏前 执⾏该通知 **/Before(value cut())public void before() {System.out.println(前置通知.....);}/*** 声明返回通知 并将通知应⽤到定义的切⼊点上 * ⽬标类⽅法⽆异常执⾏后 执⾏该通知 **/AfterReturning(value cut())public void afterReturn() {System.out.println(返回通知.....);}/*** 声明最终通知 并将通知应⽤到定义的切⼊点上 * ⽬标类⽅法⽆异常或有异常执⾏后 执⾏该通知 **/After(value cut())public void after() {System.out.println(最终通知.....);}/*** * * /*** 声明异常通知 并将通知应⽤到定义的切⼊点上 * ⽬标类⽅法出现异常时 执⾏该通知 */AfterThrowing(valuecut(),throwing e)public void afterThrow(Exception e) {System.out.println(异常通知..... 异常原因 e.getCause());} 声明环绕通知 并将通知应⽤到切⼊点上 ⽅法执⾏前后 通过环绕通知定义相应处理 需要通过显式调⽤对应的⽅法否则⽆法访问指定⽅法 (pjp.proceed();) * param pjp* return*/Around(value cut())public Object around(ProceedingJoinPoint pjp) {System.out.println(前置通知...);Object object null;try {object pjp.proceed();System.out.println(pjp.getTarget() pjp.getSignature());// System.out.println(返回通知...);} catch (Throwable throwable) {throwable.printStackTrace();System.out.println(异常通知...);}System.out.println(最终通知...);return object;}}Bean对象的循环依赖问题是什么怎么解决 当两个类相互注入时当spring尝试创建其中一个对象发现依赖于另一个先去创建其对象。解决 使用了springboot得的二三级缓存将没有完全实例化好的对象存储在二级缓存中当出现循环依赖时会在二级缓存中找到未实例化好的对象。的当出现AOP的循环依赖问题三级缓存中存在多对多每个Bean都beanFactory 通过getObject()可以获得未完全实例化好得到bean .存到二级缓存中。 AOP的使用场景有哪些如果让你去模拟一个怎么进行实现 日志打印、性能分析、安全控制、事务处理、EnableAspectJAutoProxy 在启动类上添加注解选择代理模式。用于开启基于 AspectJ 的自动代理功能写一个切面类(日志打印)component Aspect标记该切面类中 。在切面类中 定义切点pointcut(“execution()”)找到目标方法。通过interface 去实现自定义注解匹配规则中写下先自定义注解的全路径通过自定义注解找到对应的目标方法切面中实现before (“切入点”) After() AfterThrowing() AfterRunner Around() Spring事务回滚流程 spring事务通过Aop 来实现先创建一个代理对象根据aop的流程执行具体的逻辑操作。但是不通过aop的通知实现核心操作而通过transacationlnterceptor来实现调用invoker()方法实现具体的逻辑。具体流程可以描述为 先做准备工作解析Transaction注解的目标方法上的事务相关的属性根据属性或者根据配置文件 中的事务管理器 DataSourceTransactionManager启动事务。当事务启动其他的sq会等待事务结束在执行。当开启事物获取数据库连接将数据库的自动提交模式设置为false.执行具体的业务逻辑操作。如果执行成功将自动提交模式设置为true ,释放数据库连接资源。当操作执行失败抛出异常如果异常是一个runTimeException或error 通过completeTransaction 完成事务的回滚。否则不回滚事务。除非Transaction()中指定提交指定了rollbackfor 。 具体是通过doRollBack实现。事务执行完成后通过cleanupTransaction清除相关事务操作。 什么情况下事务会失效 Transactionnal 注解只能使用public的方法使用。 非public方法可能无法抛出或捕获异常。访问权限无法被外部方法调用。事务是同过aop 代理方式实现非public 的方法可能不能被拦截。 通过类 内部普通方法对 Transactional注解的方法进行调用。 事务的开始结束在service的最外层内部发生可能导致事务的范围不准确。导致事务的隔离级别不正确。异常未正确处理的不能正常回滚。导致数据库连接异常。事务不能正确进行。并发异常。 数据库不支持事务。 使用了Myisam 。 transactional 默认只处理运行时的异常进行回滚。通过rollbackFor 和norollbackFor 指定哪些异常需要回滚。事务的传播属性设置不正确。以never 、not_supported 不生效 Required :默认的传播机制存在支持当前的事务不存在创建一个新的。Supports:事务存在支持事务不存在支持非事务。Mandatory:在正常的事务内执行否则抛出异常。Requires_new不管存不存在直接开启一个新事务。Not_supported只能以非事物执行。Never:只能以非事物执行。存在事物抛异常。Nested :不存在开启事务存在事务运行一个嵌套事务。 捕获异常未抛出。导致事务终止。 捕获异常后未回滚、提交捕获异常后未记录日志或通知。捕获异常后未处理或重新抛出。 Bean没有被Spring容器管理。事务的方法内启动新线程来进行异步操作。 新线程异步操作在事务提交之前导致事务不能提交。新线程的一部操做在事务的内部并且事务的传播机制未supprot_new,会开启新的事物与原事物无关。新线程的异步操作出现异常未处理原事物订单不能回滚。 怎么证明你这个Controller方法是单例的 对控制器的构造方法使用日志打印发起多次请求后发现打印的日志只有一条。 // 创建LOgger对象调用logger.info()打印日志。SpringBootApplicationpublic class Starter {private static Logger logger LoggerFactory.getLogger(Starter.class);}public static void main(String[] args) {logger.info(SpringBoot 应用开始启动...);SpringApplication.run(Starter.class);}对该方法打断点多次发起请求查看对象是否是同一个。 Spring的七大核心组件分别是哪些 spring core 核心容器创建和管理bean的容器。springcontext spring上下文配置文件向spring提供上下文信息。spring Aopspring dao 用于访问数据的对象spring orm : 对象关系映射解决对象与数据库不匹配的问题。spring web : 为基于web的应用程序提供上下文。spring mvc spring 内置的MVC 框架。解决了web开发常见的问题参数接受、文件上传。支持restful 风格的URL 请求路劲。 IOC和AOP理解 一二三级缓存分别存储什么信息 concurrentHashMap 存储完整创建的实例Bean 当需要用时可以快速获取。ConcurrentHashMap 暂时未完成创建好的bean 对象。循环依赖中出现。concurrentHashMap 三级存储了一个bean工厂在需要创建bean的时候来创建bean 对象。 详细的日志信息怎么得到 springboot默认使用LogBack 日志系统。在yml 或 properties 文件中将日志输出的级别提高到Debug。 logging.level.rootDEBUG配置其他的日志系统–Log4J。 拦截器是怎么实现拦截的 首先先创建一个拦截器对象。实现interceptror 是接口重写他的三个方法 preHandelhostHandelafterComletion()。配置拦截器实现WebMvcConfiguration 接口。通过重写addinterceptors 方法添加多个拦截器的使用拦截器对象的addpathpatterns(“/”)添加拦截路经。 Spring中配置过滤器 实现Filter接口重写三个方法 init() 、dofilter、destroy()在实现类上使用webFilter注解定义过滤路劲。在启动类上添加ServeltCompenetScan 进行自动配置。 Cookie,Session,Token三者的区别与使用 cookie:存储在客户端的小文本数据 。安全性较低cokie可以被直接获取。存储一些非敏感、与用户会话相关的小量信息当客户端访问服务器服务器会发送给cookie到客户端存储当下次访问时会带着cookie一起访问。服务器会响应对应的数据。session存储在服务器中当客户端访问服务器服务器存储客户端的数据返回一个session ID 到客户端。客户端带着这个id 访问服务器 服务器通过id找到对应的session,就能给出这个session 对应的客户端数据。安全性较高存储用户的相关信息。token: 存储在客户端,通常是一个包含用户信息和签名的字符串.客户端带着token 到服务器服务器验证token ,返回true,则返回客户端数据。安全性主要看加密强度强弱。存储用户的权限标识。 MVC执行流程 用户发出请求-被前端控制器dispatcherServlet拦截。调用处理器映射器handerMapping处理器映射器去找到的具体的处理器xml配置或注解生成处理器对象、处理器拦截器返回给前端控制器。前端控制器调用处理器适配器handerAdapter去调用具体的处理器handler\controller 具体的处理器执行返回ModelAndView 视图对象给处理器适配器。再返回给前端控制器。前端控制器将视图给视图解析器ViewReslover解析将解析的结果 View 返回给前端控制器。前端控制器将视图进行渲染后返回给用户。 Controller层有哪些常用的注解前端传给后端的数据应该通过哪些注解接收的 前端到后端的数据 RequestBody() : 解析json 格式并将其转换为相应的java格式Requestparmar /modelTribute /RequestPart 接收前端传来的参数绑定到java 对象上。PathVariable 接收URL路劲上的参数.RequestHeader 获取请求头上的某个字段。XmlrootElement: 处理Xml数据与java对象之间的转换 前端发送到后端的对象是如何变成一个实体类的后端返回给前端的实体类又是如何变成JSON字符串 前端将对象序列化为jon字符串这个字符串中包含了对象的属性与值。后端使用RequestBody 注解标识实体内置的解析器将json字符串中的属性与值通过反射来设置该对象。springboot 默认使用jackson 来处理序列化。当controller 返回数据时自动调用jackson 序列化数据。使用阿里提供的–fastjson SSM中涉及到哪些设计模式 spring : BeanFactory就是简单工厂模式的体现用来创建对象的实例 单例模式Bean默认为单例模式。 代理模式Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术 模板方法用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。 观察者模式定义对象键一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都会得到通知被制动更新如Spring中listener的实现–ApplicationListener。 springMVC : 组合模式责任链模式过滤器链策略模式适配器模式 mybatis : 建造者模式 : 例如 SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder 工厂模式 : 例如SqlSessionFactory、ObjectFactory、MapperProxyFactory 单例模式 : 例如ErrorContext和LogFactory 代理模式 : Mybatis实现的核心比如MapperProxy、ConnectionLogger用的jdk的动态代理还有executor.loader包使用了cglib或者javassist达到延迟加载的效果 组合模式 : 例如SqlNode和各个子类ChooseSqlNode等动态SQL like、trim等 模板方法模式 : 例如BaseExecutor和SimpleExecutor还有BaseTypeHandler和所有的子类例如IntegerTypeHandler 适配器模式 : 例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现 装饰者模式 : 例如cache包中的cache.decorators子包中等各个装饰者的实现 迭代器模式 : 例如迭代器模式PropertyTokenizer 简述mybatis中#与$区别 #{} {} 都是当访问maapper 接口时传递给方法的形参值。区别 执行过程#{}将读取到的参数用来占用编译sql ,用得到的值替换? ${}直接将读取的值替换参数。 参数如果是字符串#{} 不需要手动添加 ’ ’ ${}需要否则报错sql注入#{} 预编译先用替换参数再用值替换不出现sql注入。 ${}会出现。传递关键字使用#{} 会自动添加’ ’ 会报错${}不会。 mybatis在什么场景使用mybatis出现取代了什么没有mybatis的时候怎么处理 需要频繁操作数据库复杂的业务场景编写原生sql ,与多种数据库兼容,灵活的对象映射。取代了传统的JDBC,开启jdbc,执行sql语句关闭数据库连接等操作。mybatis 只需要在maper 文件中写好对应的sql创建对应的接口。mybatis 会自动处理数据库的连接和释放。使用纯JDBC封装。里面编写JDBC的连接、执行、释放等方法。 使用其他的ORM 框架。 数据库的存储过程和视图。 mybatis接收返回值类型怎么设置有哪些 输入返回值类型paremetertype :别名或者 全类名。 _基本类型 : _int引用类型大写转小写。包装类、string ,list 、hashmap。实体类、封装的POJO类。多个参数时可以通过Param 注解实现多个参数的接收接受的时候封装为hashmap 输出返回值类型resultType: 类型_基本类型 : _int引用类型大写转小写。包装类、string ,list 、map、 实体类、封装的POJO类。 resultMap: 自定义的返回类型。当出现数据库的映射出错问题。为字段名起别名。 resultMap idempDeptMapResultMapOne typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/resultresult columndid propertydept.did/resultresult columndname propertydept.dname/result/resultMapselect idgetEmpAndDept resultMapempDeptMapResultMapTwoselect emp.*,dept.* from emp left join dept on emp.did dept.did where emp.eid #{eid} /selectMapper的映射如何设置 在dao接口定义方法。在mapper.xml文件中实现sql方法。在全局配置文件中映入mappper.xml路经配置数据库。 Mybatis如何实现多表中实体映射关系 一对一存在两张表将查询的字段封装为一个POJO类 resultMap id type id column propertyid column propertyassociation property javaTypeid column propertyresult column propertyresult column propertyresult column property/association /resultMap select id“” RequestMap编写sql /select select id“” ResultType编写sql /select一对多/多对多存在两张表以上 resultMap id type id column propertyid column propertycollection property oftypeid column propertyresult column propertyresult column propertyresult column property/collection /resultMap select id“” RequestMap编写sql /selectSpringBoot核心注解 SpringBootConfiguration 将类申明为配置类将当前类中所有以Bean 标记的方法的实例放到spring 容器中。ComponentScan自动扫描写好的当前路径下的包使用Component Controller 、Service Repository 注解标记的类。作为 bean 加载到spring容器中。EnableAutoConfiguration 自动配置的入口springBoot更据添加的 jar 包进行项目的配置。 SpringBoot加载Web运用程序的流程 SpringBootApplication 注解的 启动类 启动时调用 SpringApplication.run() 启动应用程序。 springBoot根据配置好的依赖进行自动配置生成web环境需要的Bean.(负责处理web的请求和响应)springBoot 内置的TomCat会作为默认的 Servlet 容器 自动启动。springBoot自动注册、初始化 前端控制器DispatcherServlet 类。、Spring Boot 会扫描并初始化应用程序中定义的 Web 控制器类(带有 font stylecolor:rgb(199, 37, 78);background-color:rgb(249, 242, 244);Controller/font 或 font stylecolor:rgb(199, 37, 78);background-color:rgb(249, 242, 244);RestController/font 注解的类)。 前端控制器DispatcherServlet根据控制器类的方法上的 URL 映射注解(RequestMapping、GetMapping 等)来处理 Web 请求如果控制器返回的是一个逻辑视图名,DispatcherServlet 会使用配置好的 视图解析器ViewResolver 来解析并渲染该视图。最终,处理完请求后的响应数据会通过 Tomcat 容器返回给客户端。 SpringBoot自动装配原理 springboot 提供了一系列的相关起步依赖里面包含了一组相关的依赖保证满足spring Boot 的使用·大量的自动配置类它们包含了用于配置 Spring 容器中各种组件的逻辑。在springbootautoconfigure模块的META - INF目录下有一个spring.factories文件这个文件中定义了一系列的自动配置类的全路径名。当 Spring Boot 启动时会读取这个文件找到所有需要加载的自动配置类。Spring Boot 大量使用条件注解来决定自动配置类是否应该被应用。自动判度是否需要创建自动配置类。Spring Boot 通过AutoConfigureOrder注解来控制自动配置类的加载顺序自动配置类是相互关联的。这个注解是一个整数数字越小优先级越高。 SpringBoot的启动流程 通过main方法使用springApplication .run()创建springApplication 对象、运行这个springApplication对象会开始加载环境变量配置文件、系统属性。将信息存放在Environment对象 中。选择合适的上下文。annotationConfigurSpringConText 或XmlwebConfigurSpringContext 。然后通过SpringBootApplication 去扫描对应的组件注册到上下文环境当中。进行自动配置EnableAuotConfigurtion 根据配置和依赖去配置相关的组件配置类。如果是web应用程序那么会自动去启动内置的tomcat服务器。去配置文件中设置对应的参数。前端发送请求springboot将请求传递到前端控制器。通过这个URL路劲找到对应的映射注解标记的控制器方法控制器去调用service层的方法执行业务逻辑。控制器返回视图给前端控制器前端控制器调用视图解析器解析视图返回给服务器服务器将数据响应到客户端。 springboot打成的jar包和普通项目打成的jar包有什么区别 springBoot : 内置了tomcat、jetty 的服务器jar包可以单独运行。将所有的依赖都打成一个jar包当部署项目时只需要一个jar包就可以运行。简单的运行jar包命令-java - jar .jar 便可以启动。在运行时会自动根据配置文件自动配置组件。
http://www.hkea.cn/news/14373927/

相关文章:

  • 中石化工建设宁波分公司网站字节跳动小程序开发者平台
  • 搭建网站费用邢台集团网站建设价格
  • 做一个大型网站H5平台网站建设
  • 广州服装 网站建设搜索引擎推广培训
  • 用户密码找回网站专业招牌制作公司
  • 网站建设配图网站建设维护合同书
  • 如何修改网站备案商业网站页面
  • 传奇网站怎么做搜索关键词优化服务
  • 网上做网站赚钱上海网页制作费用
  • 柯林wap建站程序个人版网站大气模板
  • 郑州网站建设伟置网络营销是什么内容
  • 英文建站软件网站建设服务条款
  • 高端网站制作上海站霸科技网站环境配
  • 软件开发网站建设图文设计用什么软件
  • 电子商务网站设计公司百度关键词价格查询
  • 在线生成网页网站织梦网站怎么做301跳转
  • 邢台专业做网站费用上海网站定制设计图
  • 石家庄整站优化技术网站做文件检查
  • 广东网站设计哪家好百色网站建设
  • 投诉举报网站 建设方案如何建立公司网站域名
  • 青岛如何建立企业网站企业wordpress维护
  • 网站 推广商系统 设计淄博企业做网站
  • 网站开发 教程wordpress怎么破解
  • 购买空间网站哪个好wordpress 标题图片
  • 海南住房和城乡建设厅网站c 网站购物车怎么做
  • 南昌seo站内优化网站的建设可以起到什么作用是什么意思
  • 易语言的网站开发系统企业网站建设方案价位
  • 宁波电商网站建设开发广州制作外贸网站
  • 美食网站设计的基本思路卖灯杆的做网站好
  • 电子商务网站创建过程湖南做网站 要上磐石网络