
Javaweb之Spring系列框架
文章平均质量分 86
java spring mybatis spring mvc
life1024
hello
展开
-
springboot 的@SpringBootApplication注解与第三方模块的xxx-boot-starter.jar,META-INF/spring.factories,手写starter
@SpringBootApplication注解的解析过程springboot默认扫描启动类所在的包下的主类与子类的所有组件,但并没有包括依赖包的中的类,如引入mybatis-starter,他的包名并不在启动类所在的包下,那么依赖包中的bean是如何被发现和加载的?我们通常在启动类中加@SpringBootApplication这个注解,点进去看@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Docume原创 2021-11-26 14:54:27 · 329 阅读 · 0 评论 -
Cglib的MethodPro的invoke和invokeSuper的区别;为何invokeSuper可以内部调用方法依然能增强,为何jdk代理不能实现invokeSuper的功能
简而言之,invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器链条,就会重新在走一次拦截器链;一。准备环境 Gglib的两个jar包,因为Cglib使用了ASM生成子类;二。代码准备public class Target { public void a() { System.out.println(" a 方法")..原创 2021-10-30 09:27:47 · 716 阅读 · 0 评论 -
关于spring 类内部方法调用aop不生效原因,以及jdk,cglib 动态代理原理
引入:spring的aop我们知道,在spring 的一个A类bean中方法fa调用A中的方法fb,即使fb上有则@Transactional,或者fb 被aop拦截了,此时fb上的所有代理织入操作都不会生效。而如果在另一个类B中调用A中的fb,则代理织入是生效的。但是经过下面实验发现,spring完全可以实现类内部方法调用 代理增强依然生效。但为何spring 不这样做呢?网上没有找到原因,以下为自己的理解原因:Spring aop应该是故意这样做的 内部调用是调用自己,不然就没办法通过代理b..原创 2021-10-30 10:33:46 · 761 阅读 · 0 评论 -
springboot 配置文件加载顺序、属性注入的优先级、 以及启动时指定配置文件
配置文件位置以及读取的顺序存放目录Application属性文件,按优先级排序,位置高的将覆盖位置底的,顺序1会覆盖下面所有的当前项目目录下的一个/config子目录 当前项目目录 项目的resources即一个classpath下的/config包 项目的resources即classpath根路径(root) 如图: 读取顺序如果在不同的目录中存在多个配置文件,它的读取顺序是:1、config/application.properties(项目根目..原创 2020-10-15 17:26:11 · 3347 阅读 · 0 评论 -
spring 三级缓存解决循环注入
spring 注入有三种方式,属性,get/set ,带参构造方法Spring中三大循环依赖场景演示在Spring环境中,因为我们的Bean的实例化、初始化都是交给了容器,因此它的循环依赖主要表现为下面三种场景。为了方便演示,我准备了如下两个类:1、构造器注入循环依赖@Servicepublic class A { public A(B b) { }}@Servicepublic class B { public B(A a) { }}结果:转载 2020-12-09 09:49:58 · 1423 阅读 · 0 评论 -
简单模拟实现 spring AOP Aspect的动态代理
package e;import java.lang.annotation.Annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import java.lang.reflect.InvocationH...原创 2020-07-23 18:58:25 · 301 阅读 · 0 评论 -
关于如何接管spring的 httpsession 的问题
正常的实现是通过filter过滤器 重新封装request和response来实现,并且在request的封装类中重写getSession方法,spring-session无缝替换应用服务器的request大概原理是:1.自定义个Filter,实现doFilter方法2.继承 HttpServletRequestWrapper 、HttpServletResponseWrapper 类,重写getSession等相关方法(在这些方法里调用相关的 session存储容器操作类)。3.在 第一步...原创 2020-07-15 09:27:00 · 379 阅读 · 0 评论 -
springboot-admin+spring-boot-actuator 实现运行状态监控
注意本文:springboot2.1.6版本亲测没问题,如果版本不匹配会出错spring-boot-actuator-client用于向 actuator 的server 暴露自己的基础信息和运行,包括线程数,堆栈,等等。。。spring-boot-admin 用于界面展示这些信息。一个server 多个client1.Spring Boot Admin 简介官方原话:codecentric’s Spring Boot Admin is a community project to ma.转载 2020-07-15 09:27:55 · 2012 阅读 · 1 评论 -
Spring AOP 原理
总结基于AspectJ注解的 @Before,@After....,基于原生的,基于org.aopalliance.intercept.MethodInterceptor的,三种方式最终的实现原理都一样,都是通过创建bean的时候调用各自的BeanPostProcessor的后置处理器处理返回代理对象。只是继承org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator(实现了BeanPostProcessor接口)改写了.原创 2020-07-15 09:28:09 · 182 阅读 · 0 评论 -
spring 启动之全过程 源码解析
主类代码public class BeanLifeCycle { public static void main(String[] args) { System.out.println("现在开始初始化容器"); ApplicationContext factory = new ClassPathXmlApplicationContext("test/beans.xml"); System.out.println("容器初始化成功"...原创 2020-06-27 10:34:43 · 711 阅读 · 0 评论 -
关于spring bean 生命周期代码详解-产生到消亡
bean生命周期顺序关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作第二种是:通过 在xml中定义init-method 和 destory-method方法第三种是: 通过bean实现InitializingBean和 DisposableBean接口初始化顺序:value–>postConstruct–>Initializing...原创 2020-06-27 10:41:14 · 720 阅读 · 0 评论 -
springboot run方法初始化,spring 初始化,以及bean的生命周期。mvc的初始化以及生命周期
注意:l懒加载的bean初始化 只是创建BeanDefinition。实例化在BeanFactory.getBean()的时候才会产生beanspringboot run方法初始化主要根据main方法和自动配置文件META-INF/spring.factories 中的相关配置类进行自动化化加载初始化等操作。注册监事件听器。初始化容器上下文Context。解析@ComponentScan扫描Bean定义生成BeanDefinition、BeanDefinitionRegistry .原创 2020-07-15 09:28:26 · 1100 阅读 · 0 评论 -
springboot的初始化启动过程
目录:构造SpringApplication实例对象 SpringApplication run方法核心逻辑 Environment简介 application配置文件加载过程 创建ApplicationContext ioc容器刷新前prepareContext ioc容器refresh过程(上篇) ioc容器refresh过程(下篇) ioc依赖注入 springboot自动配置机制 aop切面处理过程 springboot事务自动配置 自动配置springboot mvc转载 2020-07-18 12:15:51 · 1091 阅读 · 0 评论 -
mybatis 初始化,与生命周期,mapper映射创建,代理创建,curd执行过程,拦截器原理
mybatis 核心对象从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个:Configuration 初始化基础配置,比如MyBatis的别名等,一些重要的类型对象,如,插件拦截器,mapper方法元数据,映射器,ObjectFactory和typeHandler对象,MyBatis所有的配置信息都维持在Configuration对象之中SqlSessionFactorySqlSession工厂SqlSession 作为MyBatis工作的主要顶层API,表示和数..原创 2020-06-25 20:36:14 · 639 阅读 · 0 评论 -
Spring @Pointcut
AOP的基本概念Advice(通知、切面): 某个连接点所采用的处理逻辑,也就是向连接点注入的代码, AOP在特定的切入点上执行的增强处理。 @Before:标识一个前置增强方法,相当于BeforeAdvice的功能. @After:final增强,不管是抛出异常或者正常退出都会执行. @AfterReturning: 后置增强,似于AfterReturningAdvice, ...原创 2019-01-27 18:35:40 · 5105 阅读 · 0 评论 -
springboot 整合shiro
shiro是一个权限框架,具体的使用可以查看其官网http://shiro.apache.org/ 它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和shiro整合的功能!接下来就用springboot结合springmvc,mybatis,整合shiro完成对于用户登录的判定和权限的验证. 1.准备数据库表结构 这里主要原创 2017-11-28 15:40:05 · 598 阅读 · 0 评论 -
springboot 使用第三方tomcat 运行
将这个 spring Boot 项目的打包方式设置为 war。war去除內嵌tomcatSpringBoot 默认有内嵌的 tomcat 模块,因此,我们要把这一部分排除掉。(注意不放在第三方tomcat不要去掉),可以先自测没问题,再去除,当然不去除在第三方tomcat下也可以运行 org.springframework.boot s原创 2017-01-23 14:21:49 · 22935 阅读 · 3 评论 -
springboot使用
本文根据官方文档深入讲解一段代码简单例子Spring Boot建议使用Maven或Gradle,本文以Maven为例。首先创建一个一般的Maven项目,有一个pom.xml和基本的src/main/java结构。在pom.xml中写上如下内容:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x原创 2017-01-23 11:15:53 · 1128 阅读 · 1 评论 -
apache spring @RequiresRoles 不起作用
apache spring @RequiresRoles 不起作用,只需要把下面代码添加到spring-mvc 配置文件中 Support Shiro Annotation --> bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> pr原创 2017-01-18 14:22:56 · 2468 阅读 · 2 评论 -
当ssh不报错也不输出结果时。或者加上一个方法就报错
ssh java.lang.IllegalStateException: Cannot call sendError() after the response has been committed是因为 在跳转前 response已经关闭,可能在跳转前发生错误异常,但是没报,当输不出来结果,但是也不报异常时,可以在可疑代码前后加try catch 让其报异常原创 2015-10-25 15:14:18 · 972 阅读 · 0 评论 -
Struts2 和spring整合的 Action层托管问题
首先分为 entity(实体) dao(数据库操作) service action四个层千万不要注解xml混用 通常我么对于四个层的单多例设置为:(1) action一定要设为多例注意:Struts管理时;当使用注解@Scope("singleton")设置action为单例时,可以通过属性注入设置属性的为多例。(很奇怪,和sprig管理不同)spring管理时,原创 2015-10-25 15:04:59 · 1465 阅读 · 0 评论 -
SSH的编码 和 ajax乱码问题
SSH的编码 和 乱码问题乱码的原因是两次编码格式不一样首先要明白过滤器是先进后出(即在jsp页面 请求action的时候 排在前面的先执行,排在后面的后执行。当服务器响应jsp的时候,排在后面的先执行,排在前面的后执行。谁在前面谁的response设置起最终作用(相同参数覆盖,不同参数都起作用),谁放在后面谁的request会起最终作用(相同参数覆盖,不同参数都起作用))原创 2015-10-25 12:24:59 · 694 阅读 · 0 评论 -
spring 注解
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.spring原创 2015-10-19 15:57:31 · 607 阅读 · 0 评论 -
mybits入门
一、Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。二、my转载 2015-11-10 22:05:53 · 2873 阅读 · 1 评论 -
mybatis 各种传入类型
Parameter 1. 传入简单类型 JAVA代码:Java代码 public User get(Long id) { return (User) getSqlSession().selectOne("com.liulanghan.get" , id); } MAPPER :原创 2015-11-10 22:08:25 · 1290 阅读 · 0 评论 -
mybatis mapper的配置
除了通过class属性指定Mapper接口外,Mybatis还为我们提供了一个可以同时指定多个Mapper接口的方法。在现在的Mybatis版本中我们可以在mappers元素下面定义一个package子元素,用以指定Mapper接口所在的包,这样Mybatis就会把这个包下面的所有Mapper接口都进行注册。Xml代码 mappers> package name=转载 2015-12-04 16:35:10 · 1094 阅读 · 0 评论 -
mybatis 错误apped Statements collection does not contain value for
apped Statements collection does not contain value for后面是什么类什么方法之类的: 错误原因有几种: 1、mapper.xml中没有加入namespace 2、mapper.xml中的方法和接口mapper的方法不对应 3、mapper.xml没有加入到mybatis-config.xml中(即总的配置文件),例外:配置了map转载 2015-12-04 16:43:04 · 2159 阅读 · 0 评论 -
MyBatis Generator myeclipse 生成 mybatis
在下载好的插件包解压,找到generator-master\eclipse\UpdateSite目录下的feauresj和plugins放在myeclipse的相应目录下以下为配置文件 <jdbcConnection driverClass="com.mysql.jdbc.Driver"原创 2015-12-20 17:21:03 · 1921 阅读 · 0 评论 -
mybatis整合redis重写 生成key的方法
mybatis默认缓存是PerpetualCache,可以查看一下它的源码,发现其是Cache接口的实现;那么我们的缓存只要实现该接口即可。 该接口有以下方法需要实现: String getId(); int getSize(); void putObject(Object key, Object value); Object getObject(Object ke转载 2016-03-06 21:11:55 · 3613 阅读 · 0 评论 -
spring mvc不能引入js等静态文件的解决办法
spring mvc 静态资源 404问题(注意 最好不要把静态文件放在在WEB_INF下面,第1,2种方法不能访问,第三种可以访问)在web.xml配置servlet-mapping的时候,如果url-pattern设置为“/” (如下),很多人都会遇到导入js,css,图片等静态资源出现Firefox调试窗口会报出的404错误,而你的确也不能访问那些资源dispatcher原创 2015-11-10 22:26:22 · 1665 阅读 · 4 评论 -
spring mvc 传递对象 二
springController:[java] view plaincopy@Controller @RequestMapping("/user") public UserController extends BaseController{ @RequestMapping("/addUser") p转载 2015-12-01 14:51:48 · 713 阅读 · 0 评论 -
spring mvc拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。 一、定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在转载 2015-12-19 09:41:58 · 602 阅读 · 0 评论 -
spring mvc 实现远程服务调用的几种方式
org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter 实现远程服务调用服务端 必须要实现 bean实体类 service接口类 serviceImpl服务实现类客户端只需拷贝 bean 实体类 service接口类(注意 ,客户端 bean,service类要和服务端bean,service类包原创 2016-02-27 16:10:18 · 14415 阅读 · 1 评论 -
spring mvc 数据绑定问题 提交表单提示HTTP status 400, The request sent by the client was syntactically incorrect
我们在spring mvc 中controller方法中的参数,spring mvc会自动为我们进行数据绑定。spring mvc 方法中不一定要全部都有 form表单提交的属性, 也可以有 请求属性中 没有的参数(这时候只会把对应不上的参数设为null),这两种情况都不会报错。但是有几种情况会报错,可能会提示HTTP status 400, The request sent by th原创 2016-04-28 16:35:48 · 7072 阅读 · 0 评论 -
spring mvc 拦截器路径问题,只拦截固定后缀
拦截固定后缀 匹配url正确配置为 /**/*.htm 错误:**.htm /**.htm *.htm --> 不拦截的url --> 问题1:SpringMVC interceptor有时候配置的时候path="/**" 两个星号什么意思,与path="/"以原创 2016-05-18 11:29:34 · 15905 阅读 · 2 评论 -
spring mvc 防止重复提交表单的两种方法,推荐第二种
好的,下面来讲一下如何在Spring MVC里面解决此问题(其它框架也一样,逻辑一样,思想一样,和具体框架没什么关系)。要解决重复提交,有很多办法,比如说在提交完成后redirect一下,也可以用本文提到的使用token的方法(我不使用redirect是因为那样解决不了ajax提交数据或者移动应用提交数据,另一个原因是现在比较通行的方法是使用token,像python里的django框架也是使用t原创 2016-10-27 12:56:27 · 38411 阅读 · 19 评论 -
由angularjs 引发的spring mvc JSON传值问题
通常表单submit传的是 json对象 ajax 传的是json对象angular传的是json字符串对于后台接收json对象不需要再参数上加@RequestBody而对于接收json字符串 需要加@RequestBody,并且要引入jackjson jar包(1)angular向后台传json字符串@RequestBody前台angular代码 $http({原创 2016-11-03 09:32:54 · 2112 阅读 · 0 评论 -
spring使用dwr异步通信
spring中使用dwr和普通java类中使用差不多只不过要把dwr配置文件中这样写 就可以了web.xml配置文件 xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSche原创 2015-10-28 21:46:41 · 715 阅读 · 0 评论 -
spring spring-mvc mybatis 整合
以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的转载 2015-11-10 22:03:23 · 1005 阅读 · 0 评论 -
Spring注解@Component、@Repository、@Service、@Controller区别
很长时间没做web项目都把以前学的那点框架知识忘光了,今天把以前做的一个项目翻出来看一下发现用·@Component标记一个组件,而网上有的用@Service标记组件,我晕就查了一下资料:Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring原创 2015-12-04 16:45:58 · 624 阅读 · 0 评论