) 单例模式私有化了构造方法,所以其他类无法使用通过new的方式去创建对象,在其他类使用该类的实例时,只能通过getInstance去获取。...Spring下使用单例模式 最成功的单例并不是双重检验锁,而是枚举,枚举本身就是一种单例,并且无法使用反射攻击,再一个最优雅的是Spring本身实现的单例: 常用Spring中 @Repository、...@Component、@Configuration @Service注解作用下的类默认都是单例模式的,所以,我目前认为在Spring下使用单例最优的方式是将类@Component注册为组件。...使用场景主要有:数据库配置、Redis配置、权限配置、Filter过滤、webMvcConfig、swagger及自定义的时间转换器、类型转换器、对接第三方硬件时,调用硬件的dll、so文件等。...该组件的生命周期就交由Spring容器管理,声明为单例的组件在Spring容器只会实例化一个Bean,多次请求中复用同一个Bean,Spring会先从缓存的Map中查询是否存在该Bean,如果不存在才会创建对象
其实可以看到IOC真的很简单,当然了IOC简单并不表示spring的IOC就简单,spring的IOC的功能强大就在于有一系列非常强大的配置文件维护类,它们可以维护spring配置文件中的各个类的关系,...类来实例化,使用默认的构造方法,即相当于我们使用: HelloWorld tmp = new HelloWorld(); 但有一点不同的是在spring配置中的在整个应用期间只有一个实例..."> 注意其中的不同颜色部分,这样配置后就表明每次从spring容器中获取HelloWorld的实例的时候就会new一个新对象,即我们所说的原型,spring中scope...ref关键字,这个是表示引用配置文件中的ID为bean_date的对象,另外对于类型,spring会做恰当的转换,比如将345转换成数字等。...上面所说的都是构造来实例化一个bean,但有时候我们都会使用工厂模式来获取bean。对于工厂模式,我们一般也使用静态工厂模式和实例工厂模式,这两个在spring中配置也是不太一样的。
Spring-data对MongoDB进行了很好的支持,接下来就讲解一下关于Spring对MongoDB的配置和一些正常的使用 我下面的工程使用的是Spring的Java配置的方式和Maven构建 ①MongoDB...@ID 标示某个为ID域 @DbRef 标示某个域要引用其他的文档,这个文档有可能位于另外一个数据库中 @Field 为文档域指定自定义的元数据 @Version 标示某个属性用作版本域 若不使用...第二个参数是带有@Id注解的属性类型 OrderRepository继承了MongoRepository中很多自带的方法 方法 描述 long count() 返回指定Repository类型的文档数量...Save(terable) 保存指定Iterable中的所有文档 save() 为给定的对象保存一条文档 上面的我们定义的四个方法都是我们自定义的方法,其方法名存在很多意义,不能随便定义 List<...0}") List findChucksOrders(String t); @Query中给定的JSON将会与所有的Order文档进行匹配,并返回匹配的文档,这里的type属性映射成“?
指定配置文件的位置。支持classpath:和file:等前缀 Spring发现是classpath开头的,因此最终使用的是Resource的子类ClassPathResource。...@PropertySource多环境配置以及表达式使用(spring.profiles.active) 方法一:可以这么配置 @PropertySource(“classpath:jdbc-${spring.profiles.active...该注解在Spring Boot的自动化配置中得到了大量的使用 如SpringMVC的自动化配置: @ConfigurationProperties(prefix = "spring.mvc") public...@Value 是将application配置文件中,所需要的某个属性值,封装到java代码中以供使用。...应用场景不同: 如果只是某个业务中需要获取配置文件中的某项值或者设置具体值,可以使用@Value; 如果一个JavaBean中大量属性值要和配置文件进行映射,可以使用@ConfigurationProperties
今天遇到一个应用场景: 在需要在自定义的Interceptor中判断用户密码是否过期,如果过期,则重定向到修改密码页,强制修改密码,同时给出提示:“您的密码已过期,请修改密码” 判断逻辑很简单,但是重定向的时候需要前台有消息提示...,如果是在Controller中,可以在方法上注入RedirectAttributes参数,但是Interceptor中默认没有这个参数,那么我们如何实现RedirectAttributes的flashMessage...通过跟踪Spring源码,发现了实现方法: FlashMap flashMap = new FlashMap(); flashMap.put('warning', "密码已过期,请先修改密码!")
Spring Boot中Spring data注解的使用 Sring data JPA为我们提供了很多有用的注解,方便我们来实现各种复杂的功能。...@Transactional 使用@Transactional可以很简单的将方法配置成为Transactional: @Transactional void pay() {} @Transactional...可以放在方法上,也可以放在class上面,如果放在class上面则说明该class中的所有方法都适用于Transactional。...principals,所有这些注解是和Spring Security配合使用的。...@EnableJpaRepositories,我们来配置Japa Repository的相关信息: @Configuration @EnableJpaRepositories(basePackages
Spring 的 jdbcTemplate 操作 Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。...它针对JavaEE三层中的每一层都提供了不同的解决技术,在持久层,Spring提供了JDBC模板的技术,可对数据库进行CRUD操作。...Spring提供了很多持久层技术的模板类简化了编程,如下图: 持久化技术 jdbcTemplate 对 JDBC 进行了简单封装,使用类似于dbutils,但是使用并没有dbutils方便,只是提供了一种实现的方式而已...---- 在进行以下操作之前,我们肯定首先需要有一个数据库;操作数据库另外还需要数据库驱动的jar包 使用JdbcTemplate模板类还须导入jar包,先引入JdbcTemplate的jar包:spring-jdbc...现在要在单元测试类中编写一个getCount方法来测试查询表中记录数的操作。
Spring Boot 中的自动配置 SpringBoot 启动的时候,会有大量的自动配置的类加载到容器中。...正是因为 SpringBoot 的这些自动配置,使得我们在编程的时候,不像 Spring MVC 那样还需要关注各种配置,开发者只需要专心的关注业务代码。...,这个文件中定义了需要导入的配置类。...spring.factories 中的内容如下: ? 继续展开,看到这里包含了大量的自动配置类,有了这些自动配置类就能帮我们自动配置好相关内容,简化开发,提高效率。 ?...SpringBoot 的自动配置原理并不复杂,它大量的使用了条件注解@Conditional,该注解可以根据不同的条件状态来判断是否需要自动配置。想深入了解的话,可以百度一些文章,分析的比较详细。
Redis是一种特殊类型的数据库,他被称之为key-value存储 本文覆盖缓存和存储两方面进行说明,使用的是Spring 4.0和Java配置方式 存储 Redis的配置 package springmvc.rootconfig...,将其序列化 或者使用Spring Data Redis提供的序列化器 GenericToStringSerializer:使用Spring转换服务进行序列化 JacksonJsonRedisSerializer...:使用Java序列化 OxmSerializer:使用Spring O/X映射的编排器和解排器实现序列化,用于XML序列化 StringRedisSerializer:序列化String类型的key和value...注解 描述 @Cacheable 表明Spring在调用方法之前,首先应该在缓存中查找方法的返回值,如果这个值能够找到,就会返回缓存的值。...否则,这个方法就会被调用,返回值会放到缓存之中 @CachePut 表名Spring应该将方法的返回值放到缓存中。
Spring MVC的配置和使用 笔记仓库:https://github.com/nnngu/LearningNotes ---- Spring MVC需要的jar包 文章中 Spring MVC 使用的版本是...spring-context spring-core spring-expression spring-web 使用 Maven 构建的 Java 项目,需要在 pom.xml 中添加如下依赖:...Spring MVC 1、在 web.xml 文件中进行如下配置: 中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> Spring MVC的注解功能,将控制器与方法映射加入到容器中 --> <!
笔记仓库:https://github.com/nnngu/LearningNotes ---- Spring MVC需要的jar包 文章中 Spring MVC 使用的版本是 3.2.18 , 需要的...spring-core spring-expression spring-web 使用 Maven 构建的 Java 项目,需要在 pom.xml 中添加如下依赖: Spring MVC 1、在 web.xml 文件中进行如下配置: 中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --> Spring MVC的注解功能,将控制器与方法映射加入到容器中 --> <!
欢迎访问 陈同学博客原文 jasypt-spring-boot on github 本文讲述了在Spring Boot/Spring Cloud应用中使用jasypt来加密properties。...举几个小例子: 普通应用密码信息,如:DB、Rabbit、Redis等 特殊密码信息,如:Spring Cloud Config需要配置Git等VCS密码信息 第三方通讯凭证信息,如:调用第三方接口发送短信的通讯凭证信息...应用场景案例 这里以自有团队的Spring Cloud Config来举个例子。 场景: 使用两个git repository来存储配置信息,一个存储生产环境配置,一个存储非生产环境所有配置。...问题: 由于VCS的账户密码存储在配置文件中,所以分两个git repo存储配置也是自欺欺人,可以直接根据配置文件中的VCS密码下载生产环境的配置信息。...将加密后的属性值配置在配置文件中即可,ENC 是约定的关键字,在启动时会解析所有 PropertySource 中的加密属性。
背景 ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成ApplicationContext的事件机制。...如果容器中存在ApplicationListener的Bean,当ApplicationContext调用publishEvent方法时,对应的Bean会被触发。这一过程是典型的观察者模式的实现。...以Spring的内置事件ContextRefreshedEvent为例,当ApplicationContext被初始化或刷新时,会触发ContextRefreshedEvent事件,下面我们就实现一个...System.out.println("监听器获得容器中初始化Bean数量:" + event.getApplicationContext().getBeanDefinitionCount...原文链接:https://www.choupangxia.com/2019/07/17/spring中applicationlistener的使用/
框架,Spring框架默认是用JCL;‘ ==SpringBoot选用 SLF4j和logback;== 2、SLF4j使用 1、如何在系统中使用SLF4j https://www.slf4j.org...使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件; 2、遗留问题 a(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging...slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可;== 4、日志使用; 1、默认配置 SpringBoot默认帮我们配置好了日志; //记录器...spring.log 文件中 2、指定配置 给类路径下放上每个日志框架自己的配置文件即可;SpringBoot就不使用他默认配置的了(放在resources根目录) Logging System Customization... SSM日志的使用 日志的基本配置 log4j.properties * 配置日志输入格式 * 配置日志的级别 * 配置日志总体输出的文件夹
搞Spring Boot的小伙伴都知道,Spring Boot中的配置文件有两种格式,properties或者yaml,一般情况下,两者可以随意使用,选择自己顺手的就行了,那么这两者完全一样吗?...狡兔三窟 首先application.yaml在Spring Boot中可以写在四个不同的位置,分别是如下位置: 项目根目录下的config目录中 项目根目录下 classpath下的config目录中...当然这四个位置也不是一成不变的,也可以自己定义,有两种方式,一个是使用 spring.config.location属性,另一个则是使用 spring.config.additional-location...这个属性,在第一个属性中,表示自己重新定义配置文件的位置,项目启动时就按照定义的位置去查找配置文件,这种定义方式会覆盖掉默认的四个位置,也可以使用第二种方式,第二种方式则表示在四个位置的基础上,再添加几个位置...,yaml配置是有序的,这一点在有些配置中是非常有用的,例如在Spring Cloud Zuul的配置中,当我们配置代理规则时,顺序就显得尤为重要了。
循环依赖的解决办法 在 Spring 的设计中,已经预先考虑到了可能的循环依赖问题,并且提供了一系列方法供我们使用。下面就一一来为您介绍。...在 Spring 配置中,默认已经开启了 setter 注入的循环依赖解决机制,如果你想关掉它,可以配置: spring.main.allow-circular-references=false 至于为什么...3.4 使用 @PostConstruct 注解 @PostConstruct 注解会在 Spring 容器初始化的时候被调用,我们可以在这个过程中,将当前对象的引用传递给我们所依赖的对象,从而避免依赖的对象从...总结 本文介绍了在 Spring 使用过程中,避免循环依赖的处理方法。这些方法通过改变 bean 对象的实例化、初始化的时机,避免了循环依赖的产生,它们之间有着微妙的差别。...如果在 Spring 使用过程中,你并不关注于 Bean 对象的实例化和初始化的具体细节,那么,使用 setter 注入的方式是首选的解决方案。
mybatis作为持久层流行框架已经被很多产品使用,当然为了接入Spring这个业内的另一个流行框架,mybatis还是做了些事,通过分析除了明白支持Spring的机制原理还了解Spring对持久层接入留了那些口...如果没有使用Spring,那么我们怎么使用mybatis,如下: SqlSession sqlSession = sqlSessionFactory.openSession(); UserDao userDao...ManagedTransactionFactory // 当独立使用时使用的是1,当与spring结合时使用的是3(后面说明这个) TransactionFactory...这时,不管声明式事务和编程式事务只要遵守spring事务管理的都能起作用。 补充 上面遗留一个问题:SpringManagedTransactionFactory 是何时被装配进 Evn中的?...解析 XML配置,如cofnig mybatis-config.xml 及 mapperLocations 等 // 代码 省略 // 就是这里将 SpringManagedTransactionFactory
因为项目的需要,我们使用了一个第三方的电子邮件库,但是我们希望把这个库在项目中注册成 Bean 然后随时在其他地方使用。Configuration在哪里注册?...在 Configuration 类中,我们需要使用 @Configuration 这个注解。...如下图中显示的代码: @Bean public MailgunMessagesApi mailgunMessagesApi() { return MailgunClient.config...同时在这个注册中,我们使用了 Configuration 注解。如何使用在项目中如果需要对注册的 Bean 进行使用的话。我们可以在需要使用的地方进行 @Autowired 就可以了。...使用也非常简单,在类中直接用就可以了。https://www.ossez.com/t/spring-bean-autowired/14105
它是面向对象编程(OOP)的一种补充,目前已成为一种比较成熟的编程方式。 在传统的业务处理代码中,通常都会进行事务处理、日志记录等操作。...虽然使用OOP可以通过组合或者继承的方式来达到代码的重用,但如果要实现某个功能(如日志记录),同样的代码仍然会分散到各个方法中。...AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。...三、AOP中几个核心的方法注解 下边的代码我只使用的Around,其他的注解大家可以看看其他文章,或者自己试一下。...所以返回的是定义方法的对象如 //aoptest.daoimpl.GoodDaoImpl或com.b.base.BaseMapper<T, E
@Lazy注解则必须在第一次调用的时候才会加载。 @Lazy注解注解的作用主要是减少springIOC容器启动的加载时间。...@Lazy注解可以用来解决 Requested bean is currently in creation 的问题 (https://www.cnblogs.com/zjhgx/p/12158698.