bean

spring

时间秒杀一切 提交于 2020-04-08 12:42:40
程序一般都会有开发环境、测试环境以及线上环境,这些环境下程序运行依赖的基础一般不同,例如在有数据源访问的程序中,开发时可能使用了嵌入式数据库,而到测试环境上会使用独立的mysql,正式上线后的又会不同,不止数据源连接信息是与环境相关的,很多其他程序依赖的属性值也是与环境相关的。编写程序时最好要能够灵活处理不同环境的差异,我们希望如果程序运行在开发机中,则自动启用嵌入式数据库的配置值,如果在生产环境中运行则会自动适用线上的数据库连接配置值。在公司先前老的项目中,没有做好环境可变信息的分离,导致每一次在不同环境上部署程序时都要手工修改一遍程序的配置,非常难受,并且凡事手工操作就意味着效率低易出错。 目前很多java项目恐怕都要使用Spring来开发,并且Spring也支持对环境依赖相关的信息灵活管理的能力,因此我们应该把类似数据源连接这类配置交给Spring来管理。 Environment Environment 是在Spring3.0引入的一个抽象组件, Environment 能够灵活的让某种条件匹配后才注册bean到IoC容器中, Environment 还能够统一的管理底层的属性资源,即 Environment 封装的就是两方面的内容:profiles和properties。 对于profile,可以理解为profile关联了一组bean的定义

SpringBoot常用注解

浪尽此生 提交于 2020-04-08 11:54:36
@SpringBootApplication,替代@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan @ImportAutoConfiguration,导入配置类,一般做测试的时候用,正常优先使用@EnableAutoConfiguration @SpringBootConfiguration,替代@Configuration @ImportResource,将资源导入容器中 @PropertySource,导入properties文件 @PropertySources,@PropertySource的集合 @Role,bean角色定义ROLE_APPLICATION(默认值)、ROLE_SUPPORT(辅助角色)、ROLE_INFRASTRUCTURE(后台角色,用户无感) @Scope,指定bean的作用域,默认singleton,其他包括prototype、request、session、globalSession @Lazy,使bean懒加载,取消bean预初始化。用法:bean注册的地方加上@Lazy和用的地方加上@Lazy @Primary,自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出 异常 @Profile,指定bean在哪个环境被激活

Spring 常见 Annotation

余生长醉 提交于 2020-04-08 11:52:40
@AutoConfigureBefore 在 JtaAutoConfiguration 之前加载 @AutoConfigureBefore({ XADataSourceAutoConfiguration.class, ActiveMQAutoConfiguration.class, ArtemisAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) public class JtaAutoConfiguration { } @AutoConfigureAfter 与 @AutoConfigureBefore 类似,在之后加载 @Conditional 指定的Condition实现类,matches方法返回true则注入bean,false则不注入 @Bean @Conditional(BootstrapExecutorCondition.class) public EntityManagerFactoryBuilderCustomizer entityManagerFactoryBootstrapExecutorCustomizer( @ConditionalOnBean 仅仅在当前上下文中存在某个对象时,才会实例化一个 Bean @ConditionalOnBean(DataSource.class)

Spring IOC注解

感情迁移 提交于 2020-04-08 11:41:45
  在Spring中,使用xml文件完全可以实现Bean的装配工作,但如果应用中有很多Bean时     会导致xml配置文件很臃肿,给后续工作带来维护问题,此时提供了注解技术     在使用注解前需要在xml里加入<context-component-scan/>来扫描添加了注解的类,这样注解才能起作用   @Component:可以使用此注解描述Spring中的Bean,相当于xml里的<bean id="XXX" class="XXX"/>     它是一个泛化概念,仅仅表示一个组件Bean,并且可以运用在任何层次,使用时将该注解直接写在类上即可   @Repository:用于数据访问层(Dao层)的类标识为Spring中的Bean其功能与@Component相同   @Service:用于业务层(Service层)用于将业务层标识为Spring中的Bean其功能与@Component相同   @Autowired:对类的成员变量和setter方法及构造方法进行标识完成自动装配工作(DI依赖注入工作)   @Qualifier:与Autowired配合使用,会将默认按照Bean的类型进行装配,修改为按指定Bean的实例名称进行装配   @Resource:与Autowired作用相同,区别在于:@Autowired按照Bean的类型装配,而

基于Spring Boot2.0.2版本--SpringBoot整合Quartz调度框架

允我心安 提交于 2020-04-08 10:49:45
一、引言 定时任务调度 是Java开发中不可或缺的重要部分,但是Java自带的Time等任务调度类在实际项目中不好用。所以Quartz和Spring Task就成了我们项目开发技术选型最多的,在这里我们着重探讨一下Quartz在Spring Boot 2.X版本中的使用。 二、Quartz 介绍 Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。 Quartz是一个任务日程管理系统,一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。 Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能。这些功能的主要接口(API)是Scheduler接口。它提供了简单的操作,例如:将任务纳入日程或者从日程中取消,开始/停止/暂停日程进度。 2.安装配置 官方网站:官网 3.设计架构 1、介绍 Scheduler – 核心调度器 Job – 任务 JobDetail – 任务描述 Trigger – 触发器 2、图示 多个定时的图示如下: 对比下配置xml中的配置: <?xml version

基于maven项目的SSM整合

狂风中的少年 提交于 2020-04-08 09:41:43
1.添加基本的依赖坐标(项目如需有具体别的依赖,根据实际情况添加) 1 <!-- 统一管理jar包版本 --> 2 <properties> 3 <spring.version>5.0.2.RELEASE</spring.version> 4 <slf4j.version>1.6.6</slf4j.version> 5 <log4j.version>1.2.12</log4j.version> 6 <shiro.version>1.2.3</shiro.version> 7 <mysql.version>5.1.6</mysql.version> 8 <mybatis.version>3.4.5</mybatis.version> 9 <spring.security.version>5.0.1.RELEASE</spring.security.version> 10 </properties> 11 <!-- 锁定jar包版本 --> 12 <dependencyManagement> 13 <dependencies> 14 <dependency> 15 <groupId>org.springframework</groupId> 16 <artifactId>spring-context</artifactId> 17 <version>${spring.version}<

Spring是什么、spring容器、Spring三大核心思想DI(依赖注入)、IOC(控制反转)、AOP(面向切面编程)

走远了吗. 提交于 2020-04-08 06:59:19
1.Spring (1)Spring是什么? 是一个轻量级的、用来简化企业级应用开发的开发框架。 注: a.简化开发: Spring对常用的api做了简化,比如,使用Spring jdbc来访问数据库,就不用再考虑如何获取连接、关闭连接、处理异常等等。 b.解耦: Spring容器(Spring框架的一个模块)帮我们管理 对象(包括对象的创建及对象之间的依赖关系), 这样一来,对象之间的耦合度会大大降低,提供高了 系统的维护性。 c.集成其它框架: Spring可以将其它一些常用的框架集成进来,比如 可以将Quartz,MyBatis等集成进来。 (2)Spring容器 1)Spring容器是什么? Spring框架的一个核心模块,用于管理对象。 注: 管理对象指的是,spring容器会用我们创建对象, 并且建立对象之间的依赖关系。 2)如何启动Spring容器? step1.导包。 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.8.RELEASE</version> </dependency> step2.添加配置文件(applicationContext.xml)。 将配置文件添加到main/resources下。

学习Spring——两个你熟悉的不能再熟悉的场景使用

≡放荡痞女 提交于 2020-04-08 02:11:38
 最近公众号受邀获取了留言和赠送模板的权限,小开心(欢迎去公众号JackieZheng围观)。   我们大致的了解了Spring这个框架对于依赖注入的使用和诠释可谓是淋漓尽致。因为有了Spring的这个IOC也好DI也好,我们把上街买菜的事情变成了菜主动送上门的活,这样的“生活方式”大大的提高了我们对于Spring框架的用户体验。   今天主要说两件事,想必凡是稍稍接触过Spring框架开发的对于这些场景肯定都是眼熟透了——Spring如何使用多个外部属性文件以及基于注解方式配置Bean。 1. Spring使用多个外部属性文件   这个截图并不稀奇,甚至完全看不出什么逻辑,下面分别贴出各个配置文件的内容   beans.xml 1 2 3 4 5 6 7 8 ... < bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> < property name="driverClassName" value="${jdbc.driver}"/> < property name="url" value="${jdbc.url}"/> < property name="username" value="${jdbc.username}"/> <

Spring如何解决循环依赖,你真的懂了?

对着背影说爱祢 提交于 2020-04-07 20:58:08
导读 前几天发表的文章 SpringBoot多数据源动态切换 和 SpringBoot整合多数据源的巨坑 中,提到了一个坑就是动态数据源添加@Primary接口就会造成循环依赖异常,如下图: 这个就是典型的构造器依赖,详情请看上面两篇文章,这里不再详细赘述了。本篇文章将会从源码深入解析Spring是如何解决循环依赖的?为什么不能解决构造器的循环依赖? 什么是循环依赖 简单的说就是A依赖B,B依赖C,C依赖A这样就构成了循环依赖。 循环依赖分为构造器依赖和属性依赖,众所周知的是Spring能够解决属性的循环依赖(set注入)。下文将从源码角度分析Spring是如何解决属性的循环依赖。 思路 如何解决循环依赖,Spring主要的思路就是依据三级缓存,在实例化A时调用doGetBean,发现A依赖的B的实例,此时调用doGetBean去实例B,实例化的B的时候发现又依赖A,如果不解决这个循环依赖的话此时的doGetBean将会无限循环下去,导致内存溢出,程序奔溃。spring引用了一个早期对象,并且把这个"早期引用"并将其注入到容器中,让B先完成实例化,此时A就获取B的引用,完成实例化。 三级缓存 Spring能够轻松的解决属性的循环依赖正式用到了三级缓存,在 AbstractBeanFactory 中有详细的注释。 /**一级缓存,用于存放完全初始化好的 bean,从该缓存中取出的

@Import导入ImportSelector实现类demo

情到浓时终转凉″ 提交于 2020-04-07 11:51:54
1、测试类接口 package com.fh.imports.dao; public interface TestDao { void test(); } 测试类实现 package com.fh.imports.dao; import org.springframework.stereotype.Component; @Component(value = "testDao") public class TestDaoImpl implements TestDao { @Override public void test() { System.out.println("TestDaoImpl"); } } 2、添加一个ImportSelector的实现类 package com.fh.imports; import com.fh.imports.dao.TestDaoImpl3; import org.springframework.context.annotation.ImportSelector; import org.springframework.core.type.AnnotationMetadata; /** * 可以做开关 */ public class MyImportSelector implements ImportSelector { @Override