![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
10 SSM框架、设计模式
ssm
喵了个咪的回忆丶
Java后台
展开
-
Spring、springmvc、springboot 中的常用注解
Spring中的常用注解Controller 注解,用于标注控制层组件Repository 注解,用于标注数据访问层,也就是dao层。Service 注解,用于标注业务层Autowired 注解和 Resource 注解,用于注入 bean,前者按照类型装配,后者按照名称装配。Configuration 注解,标注当前类是配置类用在方法上的注解有,Bean 注解,声明该方法返回一个 ...原创 2020-04-23 12:04:08 · 639 阅读 · 0 评论 -
IOC、AOP、动态代理、Spring事务、传播机制、隔离级别
Spring中有两种事务,声明式事务和编程式事务声明式事务:建立在 AOP 之上,本质是对方法前后进行拦截,然后在方法前加入一个事务,执行完方法后根据情况进行提交或回滚。它的优点是不需要通过编程的方式来管理事务,只需要在 xml 配置文件中声明事务即可。一般常用的有两种实现方式,一种是基于< tx> 和< aop>命名空间的方式在 xml 文件中灵活管理事务,代码侵入比...原创 2020-04-23 11:45:45 · 319 阅读 · 0 评论 -
单例模式(手写)
单例模式1. 饿汉式-线程安全public class Singleton { private static Singleton uniqueInstance = new Singleton(); //私有静态变量 private Singleton() { //私有构造方法 } public static Singleton getUniqueInstan...原创 2019-11-25 14:58:25 · 198 阅读 · 0 评论 -
Spring中用了哪些设计模式
Spring中的设计模式单例模式:保证某个对象只有一个实例,对于频繁使用的对象,可以节省创建所花费的时间。Spring中 Bean 的作用域默认为 Singleton 单例的,表示单例 Bean 在IOC容器中是唯一的,这样只要 id 与 bean 相匹配,返回的就是 bean 的同一实例了。(作用域 prototype 表示每次请求都会创建一个新的 bean 实例)(IOC 容器所管理的对...原创 2020-04-22 23:45:56 · 174 阅读 · 0 评论 -
手写工厂模式
手写工厂模式public class 手写工厂方法模式 { public interface Shape { void draw(); } public interface Factory { Shape getShape(); } public static class Circle implements Shape { public Circle() { System.out.print原创 2020-09-28 16:07:14 · 1319 阅读 · 0 评论 -
实际工作中使用设计模式的例子
工厂模式+策略模式的实际使用背景是在一个需求中存在很多 if else 语句,可读性较差,代码非常的臃肿。首先建立一个 Handler 接口,它继承初始化Bean的类,这个 Handler 是策略模式的总接口,在它里面创建了一个方法,来放 if else 的执行逻辑。然后将每一个 if 里的代码逻辑放到相应的策略方法中,将所有的 if else 都抽象成这个策略的方法,然后可以直接调用抽象出来的策略方法去代替 if 里面之前的代码逻辑,于是就将 if else 里的很多行代码变成了一行代码。接着引原创 2020-09-24 09:37:04 · 464 阅读 · 0 评论 -
spring通过三级缓存解决循环依赖
1、什么是循环依赖两个或两个以上的Bean互相持有对方,导致形成闭环。比如A依赖B,B又依赖A。如何检测是否存在循环依赖:Bean在创建的时候给其打个标记,如果递归调用回来发现正在创建中的话,即可说明存在循环依赖。发生循环依赖的场景:field属性注入的循环依赖:比如通过Autowired注解,在A中注入了B,B中注入了A。构造器的循环依赖: A的有参构造是B,B的有参构造是A。2、spring通过三级缓存解决循环依赖三级缓存分别指的是:单例对象的缓存、提前曝光的单例对象的缓存、单例原创 2020-09-10 16:42:55 · 342 阅读 · 0 评论 -
Bean 的作用域
Bean 的生命周期通过构造方法实例化 Bean 对象,并利用 set 方法设置对象属性。如果 Bean 实现了接口 BeanNameAware 的 setBeanName 方法,它就会调用这个方法。如果 Bean 实现了接口 BeanFactoryAware 的 setBeanFactory 方法,它就会调用这个方法。如果 Bean 实现了接口 ApplicationContextAw...原创 2020-04-22 14:43:41 · 504 阅读 · 0 评论 -
Bean 的生命周期(Bean的实例化过程)
Bean 的生命周期(Bean的实例化过程)通过构造方法实例化 Bean 对象,并利用 set 方法设置对象属性。如果 Bean 实现了接口 BeanNameAware 的 setBeanName 方法,它就会调用这个方法,传入Bean的名字。如果 Bean 实现了接口 BeanFactoryAware 的 setBeanFactory 方法,它就会调用这个方法,传入BeanFactory对象的实例。与前面类似,只要 bean 调用了以 Aware 结尾的接口,都会调用它的方法。如果 Bean原创 2020-09-10 16:37:46 · 267 阅读 · 0 评论 -
Autowired注解的原理、Autowired和Resource的区别
Autowired和Resource的区别Autowired 由spring提供,Resource 由JavaEE提供。Autowired 按类型装配依赖对象,Resource 默认是按 name 进行装配,如果没有指定 name 属性,就按类型进行装配。(这里的 name 指的是变量名)一般用 Resource 注解多一点,因为它不是有 spring 提供的,可以减少项目中与spring 的耦合。...原创 2020-06-21 16:20:49 · 731 阅读 · 0 评论 -
@qulifier 用法、@Controller和@RestController的区别
@qulifier 用法一个接口有两个实现类,当我们通过 AutoWired 注解进行注入时,spring不知道应该绑定哪个实现类,从而导致报错。这里就可以通过 qulifier 注解来解决。通过它可以标识我们需要的实现类,具体的使用方法是让 qulifier 的参数和需要使用的实现类中 service 注解的名称一致。...原创 2020-08-11 16:50:22 · 2537 阅读 · 0 评论 -
SSM各组件的作用
SpringMVC的作用:用户发送请求,被 SpringMVC 的前端控制器 DispatcherServlet 拦截由 DispatcherServlet 查询HanderMapping,找到处理请求的ControllerController调用业务逻辑进行处理后,返回ModelAndViewDispatcherServlet 查询视图解析器,找到ModelAndView指定的视图视图负责将结果显示到客户端Mybatis 的作用:mybatis是对jdbc的封装,它原创 2020-07-16 09:06:24 · 605 阅读 · 0 评论 -
Springboot优点(和SSM的区别)、自动配置
Springboot的优点(为什么选择springboot)内嵌 Servlet 容器,可以选择内嵌 Tomcat 或者 jetty。可以以 jar 包的形式独立运行springboot项目。提供了一系列的 starter,简化了 maven 配置,比如经常使用 spring-boot-starter-web。springboot中的 SpringBootApplication 注解可以...原创 2020-04-23 00:35:53 · 2406 阅读 · 0 评论 -
SpringMVC的执行流程
SpringMVC的执行流程浏览器发送的请求打到前端控制器 DispatcherServlet 上。前端控制器将请求交给 HandlerMapping 进行解析处理,得到对应的 Handler。然后处理器适配器 HandlerAdapter 调用对应的处理器来处理请求,并返回 ModelAndView 对象给前端控制器。视图解析器对 ModelAndView 进行解析,得到具体的 Vie...原创 2020-04-22 23:04:47 · 105 阅读 · 0 评论 -
Mybatis特点、一级缓存、二级缓存
Mybatis核心组件:SqlSessionFactoryBuilder(构造器):使用建造者模式,根据配置生成 SqlSessionFactory。SqlSessionFactory(工厂接口):使用工厂模式生成 SqlSession。SqlSession(会话):获取 Mapper 接口,发送 SQL。SQL Mapper(映射器):发送 SQL 去执行。...原创 2020-04-08 14:18:32 · 289 阅读 · 0 评论 -
mybatis的SQL注入如何防止、#和$ 区别
SQL注入SQL注入是一种攻击手段,它指的是使用构造恶意的SQL语句,欺骗服务器执行SQL命令,让后台的数据库去解析,从而达到入侵目标网络,获取敏感信息的攻击手段。如何防止sql注入#{}是经过预编译的,是安全的,${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。MyBatis的SQL预编译是JDBC中的PreparedStatement类在起作用,PreparedStatement是Statement的子类,它的对象包含了编译好的SQL语句。这种“准备好”的方式不仅能提高安全原创 2020-07-16 10:51:58 · 512 阅读 · 0 评论 -
spring中的线程安全
spring中的线程安全重要:spring没有对bean的多线程安全问题做保证措施,但如果我们需要在bean中声明有状态的变量,可以使用 ThreadLocal 把变量变为线程私有的,如果bean的实例变量或类变量需要在多个线程之间共享,可以使用synchronized、lock、CAS等这些实现线程同步的方法。ThreadLocal是一个为线程提供线程局部变量的工具类。它为线程提供一个线程私有的变量副本,这样多个线程都可以随意更改自己线程局部的变量,不会影响到其他线程。需要注意的是,ThreadLo原创 2020-09-10 16:38:42 · 237 阅读 · 0 评论 -
日志级别和日志选取
日志级别日志输出级别分为以下四种,优先级别为:ERROR > WARN > INFO > DEBUG输出原则为:程序会打印出高于或等于所设置级别的日志,设置的日志等级越高,打印出来的 日志就越少,即:设置级别为 ERROR 只会打印出 ERROR 日志;设置级别为 WARN 会打印出 ERROR 和 WRAN 日志;设置级别为 INFO 会打印出 ERROR、WARN 和 INFO 日志;设置为 DEBUG 会打印出所有日志日志选取slf4j + logback...原创 2020-06-08 13:11:32 · 827 阅读 · 0 评论