SSM
记录学习SSM框架的问题,以及提炼出于自己而言的重难点。·
不想做咸鱼的咸鱼
这个作者很懒,什么都没留下…
展开
-
48ContentNegotiatingViewResolver视图解析器(视图解析器选择器)
与其叫ContentNegotiatingViewResolver为视图解析器,我觉得不如叫他视图解析器选择器,当然从宏观上来看ContentNegotiatingViewResolver是一个视图解析器。ContentNegotiatingViewResolver可以“智能”地为我们选择视图解析器,所以ContentNegotiatingViewResolver中可以囊括多个视图解析器。示例:<bean class="org.springframework.web.servlet.view.C原创 2020-09-16 18:37:04 · 771 阅读 · 0 评论 -
57RESTful之@RequestBody与@ResponseBody注解
RESTful是web应用提出的一种改进,提高系统的可伸缩性,并降低开发难度。方便前后端分离开发。RESTful API可以理解为:动作+资源标识符动作:请求 类型(POST,GET,DELETE,PUT,PATCH)资源标识符:URIRESTful建议:1. 资源标识符应使用名词2. 尽量使复数@RequestBody可以认为是@RequestParam的增强版,因为@RequestBody不仅可以处理application/x-www-form-urlencoded编码方式的请求数据还可以原创 2020-09-16 18:35:16 · 1193 阅读 · 0 评论 -
56@SessionAttribute添加session属性
@SessionAttribute只能修饰控制器,用于高速SpringMVC 哪些属性要保存到HTTP Session范围内。栗子:用户请求url:/users/sqq/books/ToLive控制器:@SessionAttributes(names = "user")@Controller@RequestMapping("/users/{userId}")public class UserController{ @RequestMapping(path = "/books/{原创 2020-09-16 18:09:48 · 341 阅读 · 0 评论 -
055@ModelAttribute修饰方法形参
当使用@ModelAttribute修饰方法形参,这意味着该参数值会自动绑定成Model属性归纳一下,SpringMVC可以从下面三个地方获取参数值:同名请求参数同名的路径变量名同名的model属性栗子:用户请求url:/my?name=lyx&age=22"/test/2"控制器:@Controllerpublic class UserController{ @GetMapping("/my") //从同名的请求参数中获取方法参数 //在这原创 2020-09-16 18:02:02 · 451 阅读 · 0 评论 -
054@ModelAttribute修饰方法
@ModelAttribute修饰的控制器方法表示在执行控制器处理方法之前执行该方法并且该方法的返回值回作为value传给Model,那么其key是什么呢?两种情况:@ModelAttribute指定了value或者name属性:key为其指定值@ModelAttribute没有指定value或者name属性:key为其返回值的类型首字母小写,比如string直接上栗子:用户请求url:/my?name=lyx&age=22控制器:@Controllerpublic clas原创 2020-09-15 23:06:19 · 178 阅读 · 0 评论 -
53SpringMVC异步处理
SpringMVC 的控制器是单例的,这意味着对同一个类中的处理方法发送的所有请求,都会共享同一个实例,因此控制器方法不适合处理耗时的方法。当控制器确实需要处理耗时方法时,建议采用异步方法来处理。即让控制器方法返回一个Callable对象,SpirngMVC 会启动新的线程来执行该Callable对象,而Callable对象的call方法的返回值才会被当成真正的处理方法返回值返回给DispatcherServlet,进而进行视图解析。栗子:用户请求url:/query?name=lyx&pr原创 2020-09-15 22:52:17 · 206 阅读 · 0 评论 -
52@MatrixVariable处理Matrix变量
@MatrixVariable可以提取更为复杂的路径变量比如用户的请求的请求地址:/petId/11;q=12;r=13其中11,12,13都是变量,如何准确地提取各个变量呢,那就要用到@MatrixVariable了@MatrixVariable中有属性:value/name:指定别修饰参数的Matrix变量,如果省略该变量,那么就会绑定同名变量pathVar:指定该Matrix变量所述的路径名,如果没有同名Matrix变量可省略required:指定该参数是否必须,默认为truede原创 2020-09-14 17:23:36 · 211 阅读 · 0 评论 -
51@PathVariable获取路径变量的值以及处理正则表达式
@PathVariable获取路径变量的值控制器方法拦截的请求地址可以设置变量,那么该控制器方法就可以拦截一批url。控制器方法拦截的url占位符用{}表示,比如/users/{userId}可以拦截/users/ccc、/users/aaa、/users/ddd等请求,当控制器方法需要获取准确的请求url就需要使用@PathVariable修饰方法参数。方法参数和url既可以基于同名映射,也可以为@PathVariable指定属性value或者name表示被修饰的参数对应的路径名(占位符名字)栗子原创 2020-09-14 17:03:37 · 2018 阅读 · 0 评论 -
50@RequestParam用法和MultiValueMap
@RequestParam修饰控制器方法参数,用于获取请求参数实例: @RequestMapping("/login") public String login(@RequestParam ("name") String n,@RequestParam("age") Integer a, Model model) { if (userService.addUser2(n,a)>0) { model.addAllAttribut原创 2020-09-13 15:32:12 · 786 阅读 · 0 评论 -
049@RequestMapping的用法
SpirngMVC 控制器拦截请求非常简单,只需要对控制器方法用@RequestMapping修饰即可其中@RequestMapping有如下属性可以指定:value/path:指定拦截的请求地址name:给映射地址指定一个名称method:指定拦截的请求类型,支持POST,GET,PUT,DELETE,PATCH,如果不指定则可以修饰所有请求consumer:指定请求的类型,比如text/plain,application/*等params:指定请求中的必须包含(或者不能包含,在前面加!)的原创 2020-09-11 19:02:30 · 161 阅读 · 0 评论 -
47SpringMVC重定向视图
SpringMVC重定向很简单,只需要让控制器返回RedirectView对象即可例如:@Controllerpublic class UserController{ @Resource(name="userService") private UserService userService; @PostMapping("/login") public View login(String username, String password, RedirectAttrib原创 2020-09-11 14:40:28 · 196 阅读 · 0 评论 -
046SpirngMVC视图解析器ViewResolver
所谓的视图解析器就是将ViewName或者ModelAndView解析成View视图对象讲解几个常见的视图解析器:UrlBasedViewResolverInternalResourceViewResolverXmlViewResolverResourceBundleViewResolverBeanNameViewResolver1. UrlBasedViewResolver和InternalResourceViewResolver关系:InternalResourceViewResolve原创 2020-09-10 10:51:18 · 125 阅读 · 0 评论 -
045SpringMVC运行流程
其中只有Controller和View需要我们自己写,其他都为SpringMVC内置的原创 2020-09-08 15:07:01 · 71 阅读 · 0 评论 -
044Spring事务机制
Spring事务策略是通过PlatformTransactionManager接口实现的,该接口是Spring事务策略的核心,PlatformTransactionManager接口有许多不同的实现类,底层使用不同的持久层技术,Spring会选用不同的实现类实现事务功能,这是典型的策略模式。Spring事务依赖SpringAOP,简单来讲就是对需要开启事务的犯法进行横切处理,在原方法体前开启事务,在原方法后提交或者回滚事务。只是该AOP的adcice不用我们写,Spring内置了优秀的管理事务的advic原创 2020-08-31 10:03:44 · 76 阅读 · 0 评论 -
043Spring的缓存机制
Spring是否使用缓存中的数据是通过方法参数(缓存的key)来判断的,往下看在xml配置文件中导入cache命名空间在xml配置文件中启用Spring缓存(一行)<cache:annotation-driven cache-manager="缓存管理器的id"/>所以接下来重要的任务就是配置缓存管理器(两种)1.配置缓存管理器1.1.Spring内置的缓存管理器配置(SimpleCacheManager)SimpleCacheManager只是一种内存中的缓存,并非真正的缓存实原创 2020-08-28 20:33:43 · 175 阅读 · 0 评论 -
042基于XML的SpirngAOP实现
栗子:项目结构beans.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"原创 2020-08-26 20:21:23 · 93 阅读 · 0 评论 -
041基于注解的SpirngAOP实现
栗子:项目结构beans.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop"原创 2020-08-26 20:09:46 · 123 阅读 · 0 评论 -
039Sprng与MyBatis整合(最简单的)
步骤开发Mapper组件开发Service组件配置bean数据表create table person( person_id int auto_increment primary key, person_name varchar(225), person_age int);1. 开发Mapper组件Mapper xml文件 和 Mapper 接口Mapper 接口public interface PersonMapper{ List<Pers原创 2020-08-18 18:54:18 · 85 阅读 · 0 评论 -
038容器处理器
所谓的容器处理器就是对Spirng容器(一般是ApplicationContext)进行处理容器处理器是一个实现了BeanFactoryPostProcessor接口的beanBeanFactoryPostProcessor中有方法:void postProcessBeanFactory(ConfigurableListableBeanFactory var1)该方法需要重写,参数var1就是容器,可对其进行处理。配置容器处理器很简单,只需要一行<bean class="容器处理器的全限原创 2020-08-16 12:52:07 · 93 阅读 · 0 评论 -
037Bean处理器
所谓的bean处理器是指对容器中所有的bean进行处理,得到一个增强的beanbean处理器是一个实现了BeanPostProcessor接口的bean。BeanPostProcessor接口中有如下两个default方法可以重写Object postProcessBeforeInitialization(Object bean, String beanName)在bean初始化之前对bean处理的方法Object postProcessAfterInitialization(Object原创 2020-08-16 12:45:38 · 91 阅读 · 0 评论 -
036SpEL表达式
SpEL主要提供如下三个接口:ExperssionParser : 该接口中的实例方法parseExpression(String str)负责将字符串str解析,返回Expression 对象。Expression 该接口实例代表一个表达式EvaluationContext : 计算表达式上下文,类似于ApplicationContext功能三个接口中的主要方法:ExperssionParser中有方法:Expression parseExpression(String str):原创 2020-08-15 13:00:15 · 470 阅读 · 0 评论 -
035用Spring工厂类在XML中 获取其他bean的属性值、获取Field值、执行普通方法并且获取返回值
你能写出来的java代码基本上都可以在xml配置,下面介绍一些高级依赖配置获取其他bean的属性值利用的工厂类:org.springframework.beans.factory.config.PropertyPathFactoryBean该类中有如下两个方法:setTargetObject(Object targetObject) :指定要获取哪个实例的属性(当然可以用ref指定其他bean)setPropertyPath(String propertyPath) :指定获取哪个属性说明:原创 2020-08-14 19:59:40 · 606 阅读 · 0 评论 -
034协调作用域不同的Bean
如果一个singleton Bean 引用了一个 prototype Bean(或者说把一个prototype Bean注入到singleton Bean中),那么就会产生一个问题:singleton Bean在被预初始化后,接下来怎么调用singleton Bean都是同一个对象,也 就意味着singleton Bean中的 prototype Bean一直都是最开始的那一个。那么就违背了prototype Bean的设计初衷(既然把它设计成prototype 作用域,肯定是想每次用到的be原创 2020-08-13 14:41:05 · 136 阅读 · 0 评论 -
033Bean的生命周期
bean的生命周期大致分为三个部分:初始化、对外提供服务、销毁。有时候需要在特定的生命周期阶段对bean进行操作,Spirng提供了很好的支持。管理生命周期行为主要有两个时机:注入依赖刚完成之后(初始化后)、bean即将销毁之前。为两个时机分别提供了两种策略:在xml中配置bean的时候通过配置init-methond来指定初始化完成之后立即执行的方法。让该bean实现InitializingBean接口,并且实现接口中的方法void afterPropertiesSet()与之对应原创 2020-08-13 14:11:13 · 80 阅读 · 0 评论 -
032获取Bean本身在Spring中配置的Id
有时候Bean需要预知自己在xml配置中自己的id到底被配置成了什么,那么可以通过实现BeanNameAware接口实现并且实现接口中的setBeanName(String name)方法,Spring会自动调用这个方法,并且把bean的id作为参数传给setBeanName。...原创 2020-08-13 13:51:59 · 142 阅读 · 0 评论 -
031用工厂类配置bean(FactoryBean接口用法)
除了可以在xml中用factory-method告诉Spring这个类是工厂类之外(详情请见另一篇博客:Spirng工厂类),还可以让该类实现FactoryBean告诉Spirng这是一个工厂类。FactoryBean中要实现的方法:Object getObject() :主要方法,返回工厂类要返回的对象(工厂类的产品)Class getObjectType():工厂类返回对象的类型boolean isSingleton():返回对象是否用单例模式至于xml中配置则完全正常配置,Spring会原创 2020-08-13 13:44:18 · 224 阅读 · 0 评论 -
030Spring利用工厂类创建Bean对象
除了可以用构造器创建Bean对象之外,还可以同对象工厂创建bean工厂创建bean分两种情况工厂类里创建对象的方法是static方法工厂类里创建对象的方法是实例方法。public interface Dog{}public class GunDog implements Dog{ private String name; //省略getter和setter方法}public class PetDog implements Dog{ private Strin原创 2020-08-12 13:34:54 · 228 阅读 · 0 评论 -
029Spring配置组合属性
所谓的组合属性就是配置bean属性的属性比如我们要给Person的GunDog配置一个名字Person.javapublic class Person{ private GunDog dog; //省略setter和getter、toString方法}GunDog.javapublic class GunDog implements Dog{ private String name; //省略setter和getter、toString方法}<?x原创 2020-08-12 12:00:19 · 105 阅读 · 0 评论 -
028Spirng注入集合
当传参为集合(包括 数组、List、 Set、 Map 、Properties)时,如何配置xmlPerson.javapublic class Person{ private String name; private String[] nick; private List<String> color; private Set like; private Map<String,Integer> score; private Propertie原创 2020-08-12 11:45:05 · 78 阅读 · 0 评论 -
027Bean配置的参数为复合类(配置bean与bean之间的依赖)
三种方法:方法一:指定ref属性最简单的一种就是指定bean的ref属性,然后指定另一个bean的id<bean id="chinese" class="com.lyx.service.Chinese"> <property name="axe" ref="steelAxe"/></bean><bean id="steelAxe" class="com.lyx.service.SteelAxe"/>方法二:嵌套bean为bea原创 2020-08-11 20:57:40 · 134 阅读 · 0 评论 -
026Bean别名
xml解析对id属性是有要求的,只能由数字字母、下划线组成,必须以字母开头。但是在一些情况下无法满足xml解析要求,必须为bean指定别名。两种方式:方法一name属性指定bean的name属性,该属性值就是该bean的别名。并且可以同时指定多个别名,以,隔开。 <bean id="dog1" class="com.lyx.service.Dog" name="@#$"/>方法二配置alias 元素在beans元素中配置alias 元素为alias 元素指定name属性(需要为原创 2020-08-11 20:30:13 · 134 阅读 · 0 评论 -
025Bean的作用域
可以通过设置bean的scope属性来指定bean的作用域Spring支持6种作用域:singleton: Spring管理该bean, 随Spring Ioc容器共存亡。prototype: 调用getBean使用该bean时创建,若该bean失去引用随时准备被GCrequest: 作用域为一次HTTP请求session: 作用域为一次HTTP请求会话-application: 作用域为整个web应用-websocket: 作用域为整个 Websocket 的通信过程...原创 2020-08-11 20:21:06 · 72 阅读 · 0 评论 -
024Bean获取Spring容器对象
只需要让该bean实现ApplicationContextAware接口,并且实现方法 setApplicatonContext(ApplicationContext ctx)Spring初始化的时候会自动检查所有的bean,如果该bean实现了ApplicationContextAware接口那么就会自动调用该bean中的setApplicatonContext(ApplicationContext ctx)方法,并且Spring把自身作为参数传进去,该bean就能拿到ApplicatonContext原创 2020-08-11 20:13:25 · 81 阅读 · 0 评论 -
023Spring事件机制
事件Spring内置事件:ContextRefreshedEvent: ApplicationContext容器初始化或者刷新触发ContextClosedEvent: 调用ConfigurableApplicationContext(ApplicationContext子接口)的 close()方法时触发ContextStartedEvent: 调用ConfigurableApplicationContext(ApplicationContext子接口)的 start()方法时触发Contex原创 2020-08-11 20:06:37 · 127 阅读 · 0 评论 -
022Spring资源访问
资源:来自各种渠道(磁盘、网络、类加载路径)的文件MyBatis内置Resource类型转换器,能把字符串的value 转换成Resource的对象,所以指定Resource特别方便<!--res为MyResource中的成员变量,类型为Resource--><bean id="myResource1" class="com.lyx.service.MyResource"> <!--beans.xml为类加载路径中的资源--> <prope原创 2020-08-10 15:56:48 · 82 阅读 · 0 评论 -
021ApplicationContext国际化
国际化三步(1)编写国际化资源文件。国际化资源文件的文件名总是 [basename]_语言代码_国家代码.properties(例如mess_zh_CN.properties)(2)加载国际化资源文件容器中一个名为messageSource,类型为ResourceBundleMessageSource的Bean用于管理国际化资源文件。(不能改)该类提供了如下两个方法:setBasenamesetBasenames(3)根据key去获取国际化消息。ApplicationContext提供原创 2020-08-10 15:46:47 · 224 阅读 · 0 评论 -
020BeanFactory和ApplicationContext
关系:ApplicationContext是BeanFactory子接口,所以ApplicationContext比BeanFactory功能更强大。BeanFactoryBeanFactory接口中有如下几个基本方法boolean containsBeans(String name)Object getBean(String name) T getBean(String name,Class requiredType)Class<?> getType(String name)B原创 2020-08-10 15:36:18 · 106 阅读 · 0 评论 -
019Spring依赖注入(控制反转IoC)
依赖注入和控制反转一个意思,都是讲由原来主动地new一个对象变成能够被动地获取对象。依赖注入有如下三种方式设置注入:IoC容器使用setter方法注入被依赖对象构造注入:IoC容器使用构造器注入被依赖对象接口注入:调用者实现特定的接口,并实现接口中特定的方法,而IoC容器会自动检测并调用这个特定的方法,从而完成依赖注入。设置注入Spring会根据bean元素里的子元素property里的name属性和value/ref属性来调用bean对象的对应的setter方法为Bean成员变量注入值。va原创 2020-08-10 10:07:45 · 75 阅读 · 0 评论 -
018Spring入门
Spring是业务逻辑层框架。Spring的核心是:IoC和AOPIoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦。AOP支持将一些通用任务如安全、事务、日志等进行集中处理,从而提供了更好的复用。对于Spring框架而言,一切对象都是Bean。通过Bean标签添加对象(id属性:对象的别名,class属性:对象对应类的全限定类名)。哪个类需要用到Spring中的对象直接拿来用就好(实际上是Spring注入所需的对象),相当于Spring替代了对象工厂。具体使用方式 :bean.xml原创 2020-08-10 09:33:14 · 78 阅读 · 0 评论 -
017Mybatis缓存机制
缓存可分为一级缓存和二级缓存一级缓存:sqlSession级别的缓存,默认打开并且不可关闭二级缓存:Mapper级别的缓存,默认关闭需要手动打开一级缓存(Local Cache)一级缓存是sqlSession级别的,也就是说一级缓存与sqlSession关联,只有同一个sqlSession才可能访问相同的缓存资源。所谓的缓存资源,就是在执行查询语句时把 查询语句 与 结果集 成对缓存(相当于Map的key与value对应)当执行DML语句(delete,insert,update)时,一级缓存资原创 2020-08-06 21:04:10 · 109 阅读 · 0 评论