单例bean存在线程安全问题,当多线程操做成员变量时会有冲突发生,若是定义在方法入参处那样在栈中则不会。避免使用成员变量或推荐使用ThreadLocal成员变量拉html
预先知识前端
其实在学习Spring时就有接触,没有使用就很容易忘记,见名知意java
一、实现InitializingBean接口中的afterPropertiesSet方法spring
二、实现DisposableBean接口中的destroy方法sql
三、bean标签中init-method方法数据库
四、bean标签中destroy-method方法编程
五、实现BeanPostProcessor接口的postProcessBeforeInitialization和postProcessAfterInitialization:分别在容器初始化bean对象以前以后执行json
六、实现xxxAware接口,获取Spring框架的对象:设计模式
总结:缓存
工厂模式:BeanFactory和ApplicationContext建立bean对象
代理模式:AOP的动态代理
单例模式:默认bean时单例的
模板模式:JDBCTemplate对数据库操做的类
观察者模式:Spring的事件
Spring从配置文件中读取类的信息将其放入容器的BeanDefinition注册表中,而后根据注册表实例化bean对象将其放入缓存池中,当须要使用时,若是使用@Autowired注解,则根据类类型匹配key值,(map存放bean对象),匹配不到报错、匹配多个,则按名字再匹配,没有或多个也报错。能够用@Qualifier指定名字匹配
Spring的AOP是面向切面编程,其有JDK的基于接口和cglib基于子类的实现,Spring都集成了两者,因此是开发者是透明的,单例使用JDK,多例使用cglib效率会更好
一句话总结:请求发送到前端控制器,而后转移给映射器返回处理器和拦截器链,前端控制器经过控制器获取适配器,而后调用里面的hanlder方法执行控制器方法,控制器将json返回值返回到客户端,具体请看 SpringMVC知识梳理
post:使用CharacterEncodingFilter
get:参数重编译,更改tomcat配置文件的编码、
使用json的话映射注解中加入@RequestMapping(value = "/user", produces = "application/json;charset=utf-8")
或者springmvc.xml全局配置
<!-- 开启mvc的注解支持,而且在Responsebody上使用UFT-8 --> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="text/html;charset=UTF-8"></property> </bean> </mvc:message-converters> </mvc:annotation-driven>
// 项目名 ssm // @RequestMapping(value = "/user") // /index2.html表示项目根地址,没有带项目名 // index2.html被mapping带乱变成 /ssm/user/index2.html // 因此全写上 response.sendRedirect("/ssm/index2.html"); request.getRequestDispatcher("/ssm/index2.html").forward(request,response);
不行,由于是根据全限定类名+方法名做为key值惟必定位一个MappedStatmented的
使用Mybatis提供的接口,拦截语句后再改写语句
使用cglib动态代理,拦截方法,当发现调用的属性为空时,会单独发送事先保存的关联对象的sql语句
终于阶段性完成一部份内容了,好想出去啊 2020/03/06