SpringBoot学习笔记
SpringBoot中必须掌握的27个注解
SpringBoot中必须掌握的27个注解Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成。
而Spring Boot之所以能够轻松地实现应用的创建及与其他框架快速集成,最核心的原因就在于它极大地简化了项目的配置,最大化地实现了“约定大于配置”的原则。
然而基于Spring Boot虽然极大地方便了开发,但是也很容易让人“云里雾里”,特别是各种注解很容易让人“知其然而不知其所以然。
所以,要想用好Spring Boot就必须对其提供的各类功能注解有一个全面而清晰地认识和理解。
一方面可以提高基于Spring Boot的开发效率,另一方面也是面试中被问及框架原理时所必需要掌握的知识点。
在接下来的内容中,小编就带大家一起来探究下Spring Boot的一些常用注解吧!一、Spring相关6个基础注解Spring Boot的有些注解也需要与Spring的注解搭配使用,这里小编梳理了在项目中与Spring Boot注解配合最为紧密的6个Spring基础框架的注解。
如1、@Configuration从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
2、@ComponentScan做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。
SpringBootActuator学习笔记
SpringBootActuator学习笔记spring boot ActuatorActuator概述Actuator指的是负责和移动装置的组件。
通过Actuator暴露的端点我们可以获取⼀个正在运⾏中的应⽤内部的状态导⼊依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>Actuator具备⼀些开箱即⽤的端⼝Endpoints id描述HTTP⽅法是否敏感信息auditevents显⽰当前应⽤程序的审计事件信息GET Yesbeans显⽰应⽤上下⽂中创建的所有Bean GET Yescaches显⽰可⽤缓存信息GET Yesconditions显⽰⾃动装配类的状态及及应⽤信息GET Yesconfigprops显⽰所有 @ConfigurationProperties 列表GET Yesenv显⽰ ConfigurableEnvironment 中的属性GET Yesflyway显⽰ Flyway 数据库迁移信息GET Yeshealth显⽰应⽤的健康信息(未认证只显⽰status,认证显⽰全部信息详情)GET Noinfo显⽰任意的应⽤信息(在资源⽂件写info.xxx即可)GET Noliquibase展⽰Liquibase 数据库迁移GET Yesmetrics提供应⽤运⾏状态的完整度量指标报告GET Yesmappings显⽰所有 @RequestMapping 路径集列表GET Yes scheduledtasks显⽰应⽤程序中的计划任务GET Yessessions允许从Spring会话⽀持的会话存储中检索和删除⽤户会话。
三十五个常见的Spring Boot知识点
Spring Boot 是微服务中最好的Java 框架. 我们建议你能够成为一名Spring Boot 的专家。
本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力!问题一Spring Boot、Spring MVC 和Spring 有什么区别?1、SpringSpring最重要的特征是依赖注入。
所有SpringModules 不是依赖注入就是IOC 控制反转。
当我们恰当的使用DI 或者是IOC 的时候,我们可以开发松耦合应用。
松耦合应用的单元测试可以很容易的进行。
2、Spring MVCSpring MVC 提供了一种分离式的方法来开发Web 应用。
通过运用像DispatcherServelet,MoudlAndView 和ViewResolver 等一些简单的概念,开发Web 应用将会变的非常简单。
3、SpringBootSpring 和SpringMVC 的问题在于需要配置大量的参数。
Spring Boot 通过一个自动配置和启动的项来目解决这个问题。
为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。
问题二什么是自动配置?Spring 和SpringMVC 的问题在于需要配置大量的参数。
我们能否带来更多的智能?当一个MVC JAR 添加到应用程序中的时候,我们能否自动配置一些beans?Spring 查看(CLASSPATH 上可用的框架)已存在的应用程序的配置。
在此基础上,Spring Boot 提供了配置应用程序和框架所需要的基本配置。
这就是自动配置。
问题三什么是Spring Boot Stater ?启动器是一套方便的依赖没描述符,它可以放在自己的程序中。
你可以一站式的获取你所需要的Spring 和相关技术,而不需要依赖描述符的通过示例代码搜索和复制黏贴的负载。
例如,如果你想使用Sping 和JPA 访问数据库,只需要你的项目包含spring-boot-starter-data-jpa 依赖项,你就可以完美进行。
springboot学习
springboot学习Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置。
简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题---习惯大于约定。
Spring Boot默认使用tomcat作为服务器,使用logback提供日志记录。
无需多言,直接进入节奏:前提Spring Boot提供了一系列的依赖包,所以需要构建工具的支持:maven 或gradle。
个人仅熟悉maven,所以下面的内容都是maven相关的。
如果不熟悉maven,请先了解一下。
使用①新建一个maven项目。
②pom中parent设为spring-boot-starter-parent 。
建议使用最新的RELEASE 版本。
否则可能需要设置<repositories/> 和<pluginRepositories/> 。
③添加应用需要的starter模块,作为示例,我们仅添加web starter模块。
这里需要解释下starter模块,简单的说,就是一系列的依赖包组合。
例如web starter模块,就是包含了Spring Boot 预定义的一些Web开发的常用依赖:○spring-web, spring-webmvc Spring WebMvc 框架○tomcat-embed-* 内嵌Tomcat容器○jackson处理json数据○spring-*Spring框架○spring-boot-autoconfigure Spring Boot提供的自动配置功能换句话说,当你添加了相应的starter模块,就相当于添加了相应的所有必须的依赖包。
starter模块的列表及含义,见Spring Boot的启动器Starter详解。
至此,pom内容如下:<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>rry.spring</groupId><artifactId>larry-spring-demo4</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.0.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>保存pom,刷新maven,以便刷新依赖导入。
springboot知识点总结
springboot知识点总结⼀、springboot总结1、概述springboot是⼀种快速使⽤spring框架的简便⽅式,springboot简单来说相当于⼀个程序搭建的脚⼿架,最⼤的作⽤就是能够帮助我们快速构建项⽬,并且尽可能的减少xml的配置⽂件,让程序的开发更加的简单,开箱即⽤,快速上⼿,让我们在程序开发的过程中能狗将更多的精⼒去关注到程序的业务逻辑,⽽并⾮是配置⽂件,总之,我为springboot总结了三个字,概括:轻(易配置,易通⽤,启动时间段),快,简2、为什么要⽤springboot因为在之前Java开发有⼀个特别⼤的痛点就是配置特别臃肿和⿇烦,有时候当你在幸幸苦苦搭环境的时候,可能python程序员早已经将代码敲完了(年轻⼈不讲武德),主要就是原因就是以下两条:1、复杂的配置项⽬中的各种配置其实是开发时的⼀个损耗,程序员在开发过程中思维需要在项⽬配置和业务逻辑之间来回切换,所有的对程序员来时是⼀件⽐较头疼的事,在程序开发的过程中我觉得程序员因该把更多的时间和经历放在业务代码上,配置这些因该有时间私下悄悄研究2、混乱的项⽬管理项⽬中的依赖管理是⼀件⾮常难搞的事情,本来选择⽤哪些库就已将很头疼了,但是选择完依赖之后还得考虑版本冲突的问题,如果前期搞不好,后期可能出现致命的问题,并且在选择上⾯就是⼀种消耗,并且如果选择不对,后期的返⼯更是⼀个消耗,搞不好还会拉慢项⽬的进度,所有这个⼯作⼀般是公司的主程来搞。
综上,springboot就是解决了以上的问题,能够快速搭建⼀个开发环境,⽽且还没有那么多复杂的配置,并且可以对项⽬依赖进⾏⼀个很好的管理3、springboot的特点1、简易轻便,开箱即⽤,容易上⼿2、快,环境搭建快,没有繁琐的配置,约定⼤于配置3、提供了⼀些⼤型项⽬中常见的⾮功能性的特性,内嵌服务器,安全,指标,健康检测,等以上⼤概就是springboot的主要的⼀些特点4、springboot⽀持的配置⽂件类型1、.properties(优先加载,和之前的⼀样,但是⼀般⽤后者)2、.yml(采⽤缩进的⽅式,⼀般⽤这个,因为他可以放集合数组,并且⽐较清晰,容易阅读)3、.yaml(同上)5、springboot⾃动配置原理springboot的有⼀个启动类,可以从这个启动类出发进⾏探究:启动类上⾯有⼀个关键的注解:@SpringBootApplication,main⽅法中有⼀个run⽅法,springApplication.run(),分开讨论⼀下:1、**SpringBootApplication:**点击进⼊,可以看到有七个关键的注解:@Target(ElementType.TYPE)注解在什么位置⽣效,ElementType.TYPE在类上@Retention(RetentionPolicy.RUNTIME)什么时候⽣效,RetentionPolicy.RUNTIME运⾏时⽣效@Documented 是否⽣成api⽂档@Inherited 是否被继承**@SpringBootConfiguration(点进去@Configuration)**声明了当前类为配置类,springboot会⾃动扫描到添加了@Configuration的类,并且读取了配置信息,@SpringBootConfiguration声明了当前类为springboot的配置类,springboot有⼀个,所以我们不需⾃⼰添加@EnableAutoConfiguration是否引⼊了⼀些第三⽅库,如果引⼊了第三⽅库的⼀些依赖,这些配置⽣效,所以我们在构建了springboot项⽬后,如果想要引⽤第三⽅库,只需要导⼊相应的依赖,配置都交给springboot处理@ComponentScan就是⼀个扫描包的作⽤,因为这个注解是加在springboot的启动类,所以扫描的包是在类同级的包以及⼦包,因此,⼀般启动类会放在⼀个⽐较前的包⽬录中。
SpringBoot踩坑笔记二:SpringBoot整合redis报Noqualifyin。。。
SpringBoot踩坑笔记⼆:SpringBoot整合redis报Noqualifyin。
今天在学习Spring Boot整合redis的过程中遇到个问题,在使⽤@Autowiredprivate RedisTemplate<String, Object> redisTemplate;注⼊时,启动项⽬会报异常org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.bh.redis.RedisTest': Unsatisfied dependency expressed through field 'redisTemplate'; nested exception is org.springframework.beans.facto at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1341) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:393) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118) ~[spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) ~[spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:44) ~[spring-boot-test-autoconfigure-2.0.5.RELEASE.jar:2.0. at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246) ~[spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12]at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209) [.cp/:na]Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<ng.String, ng.Object>' available: expected at least 1 bean which qualifi at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:583) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]... 29 common frames omitted这么⼀⼤串看的是不是有点懵,其实咱们看⼀句可以了No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<ng.String, ng.Object>' available:⼤致意思是没有与RedisTemplate<String, Object>匹配的bean解决⽅法1、不指定泛型,如@Autowiredprivate RedisTemplate redisTemplate;2、使⽤@Resource注解代替@Autowired,如@Resourceprivate RedisTemplate<String, Object> redisTemplate;。
spring培训学习笔记
s Spring培训学习笔记spring概述.................................................. 错误!未定义书签。
控制反转,还是依赖注入................................... 错误!未定义书签。
面向方面编程............................................. 错误!未定义书签。
一致性抽象............................................... 错误!未定义书签。
事务管理................................................. 错误!未定义书签。
测试..................................................... 错误!未定义书签。
与其它框架整合........................................... 错误!未定义书签。
控制反转..................................................... 错误!未定义书签。
容器(container) .......................................... 错误!未定义书签。
IoC类型................................................. 错误!未定义书签。
IoC in spring ............................................ 错误!未定义书签。
DI with spring ........................................... 错误!未定义书签。
AOP ......................................................... 错误!未定义书签。
【狂神说Java】SpringBoot笔记存档
【狂神说Java】SpringBoot笔记存档转⾃,⾮常感谢⽼师,仅作为个⼈笔记使⽤部分来⾃1、SpringBoot简介:Hello,World!1.1、回顾什么是SpringSpring是⼀个开源框架,2003 年兴起的⼀个轻量级的Java 开发框架,作者:Rod Johnson 。
Spring是为了解决企业级应⽤开发的复杂性⽽创建的,简化开发。
1.2、Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采⽤了以下4种关键策略:1、基于POJO的轻量级和最⼩侵⼊性编程,所有东西都是bean;2、通过IOC,依赖注⼊(DI)和⾯向接⼝实现松耦合;3、基于切⾯(AOP)和惯例进⾏声明式编程;4、通过切⾯和模版减少样式代码,RedisTemplate,xxxTemplate;1.3、什么是SpringBoot学过javaweb的同学就知道,开发⼀个web应⽤,从最初开始接触Servlet结合Tomcat, 跑出⼀个Hello Wolrld程序,是要经历特别多的步骤;后来就⽤了框架Struts,再后来是SpringMVC,到了现在的SpringBoot,过⼀两年⼜会有其他web框架出现;你们有经历过框架不断的演进,然后⾃⼰开发项⽬所有的技术也在不断的变化、改造吗?建议都可以去经历⼀遍;⾔归正传,什么是SpringBoot呢,就是⼀个javaweb的开发框架,和SpringMVC类似,对⽐其他javaweb框架的好处,官⽅说是简化开发,约定⼤于配置, you can "just run",能迅速的开发web应⽤,⼏⾏代码开发⼀个http接⼝。
所有的技术框架的发展似乎都遵循了⼀条主线规律:从⼀个复杂应⽤场景衍⽣⼀种规范框架,⼈们只需要进⾏各种配置⽽不需要⾃⼰去实现它,这时候强⼤的配置功能成了优点;发展到⼀定程度之后,⼈们根据实际⽣产应⽤情况,选取其中实⽤功能和设计精华,重构出⼀些轻量级的框架;之后为了提⾼开发效率,嫌弃原先的各类配置过于⿇烦,于是开始提倡“约定⼤于配置”,进⽽衍⽣出⼀些⼀站式的解决⽅案。
SpringBoot常用注解和原理整理
SpringBoot常⽤注解和原理整理⼀、启动注解 @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {}查看源码可发现,@SpringBootApplication是⼀个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration`,@ComponentScan`这三个注解``@SpringBootConfiguration注解,继承@Configuration注解,主要⽤于加载配置⽂件@SpringBootConfiguration继承⾃@Configuration`,⼆者功能也⼀致,标注当前类是配置类,并会将当前类内声明的⼀个或多个以@Bean注解标记的⽅法的实例纳⼊到spring容器中,并且实例名就是⽅法名。
@EnableAutoConfiguration 注解,开启⾃动配置功能@EnableAutoConfiguration可以帮助SpringBoot应⽤将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使⽤的IoC容器。
SpringBoot 笔记整理
Spring Boot资料整理 (2)第一节Spring Boot之Hello World (2)1.1 Spring Boot介绍 (2)1.2 Spring Boot特性 (2)1.3 Hello Spring Boot 编写 (3)第二节Spring Boot 核心 (4)2.1 入口类和@SpringBootApplication (4)2.2 关闭SpringBoot自动配置 (4)2.3 全局配置文件 (5)2.4 Starter pom (6)2.5 Xml 配置文件 (6)2.6 日志 (6)第三节Spring Boot 自动配置的原理(了解) (7)3.5.1 Maven下载源码 (7)3.5.2 源码分析 (7)3.5.3 SpringBoot 条件注解 (8)第四节SpringBoot Web 开发 (9)4.1 自动配置静态资源 (9)4.2 自定义消息转化器 (11)4.3 自定义SpringMVC的配置(重点) (12)4.4 SpringBoot 使用FastJson (13)4.5 读取外部资源文件 (14)4.6 Spring Boot JPA / Hibernate / Spring Data概念 (15)4.7 Spring Boot JPA-Hibernate 使用 (16)4.8 Spring Data JPA介绍 (16)4.9 SpringBoot JdbcTemplate 使用 (17)4.10 SpringBoot 全局异常捕捉 (18)4.11 SpringBoot 添加JSP支持 (19)第五节SpringBoot 整合其他框架.............................................................. 错误!未定义书签。
Spring Boot资料整理第一节Spring Boot之Hello World回顾Spring的发展:Spring1.x 时代:都是通过xml文件配置bean,随着项目的扩大,配置Xml过于繁琐; Spring2.x时代:JDK1.5带来了注解的支持,此时可以使用注解对Bean进行声明注入; Spring3.x到Spring4.x :使用Java配置方式可以更好的理解你配置的Bean;并且Spring4.x和Spring boot都推荐使用java配置的方式,可完全替代Xml@Configuration和@BeanSpring的Java配置方式是通过@Configuration 和@Bean 这两个注解实现的:1、@Configuration 作用于类上,相当于一个xml配置文件;2、@Bean 作用于方法上,相当于xml配置中的<bean>;1.1 Spring Boot介绍Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
Spring学习笔记
Spring学习笔记Java相关课程系列笔记之十五笔记内容说明Spring(梁建全老师主讲,占笔记内容100%);目录一、Spring概述 (1)1.1 Spring框架的作用 (1)1.2 Spring框架的优点 (1)1.3 Spring框架的容器 (1)二、Spring容器的基本应用 (2)2.1如何将一个Bean组件交给Spring容器 (2)2.2如何获取Spring容器对象和Bean对象 (2)2.3如何控制对象创建的模式 (2)2.4 Bean对象创建的时机 (2)2.5为Bean对象执行初始化和销毁方法 (2)2.6案例:Spring框架的使用以及 2.1节-2.5节整合测试 (3)三、Spring框架IoC特性 (5)3.1 IoC概念 (5)3.2 DI概念 (5)3.3案例:测试IoC(set注入) (5)3.4案例:测试IoC(构造注入) (6)3.5案例:不用JDBC访问数据库,而是采用Hibernate访问 (6)四、Spring中各种类型的数据注入 (7)4.1 Bean对象注入 (7)4.2基本数据的注入 (7)4.3集合的注入 (7)4.4案例:各类数据注入 (7)五、AOP概念 (10)5.1什么是AOP (10)5.2 AOP和OOP的区别 (10)5.3 AOP相关术语 (10)5.4案例:AOP的使用,模拟某些组件需要记录日志的功能 (11)5.5通知类型 (11)5.6切入点 (12)5.7案例:环绕通知,修改 5.4案例使之动态显示所执行的操作 (12)5.8案例:利用AOP实现异常处理,将异常信息写入文件 (13)六、Log4j日志记录工具 (14)6.1 Log4j介绍 (14)6.2 Log4j的使用 (14)6.3案例:修改 5.8案例,使用Log4j记录日志 (15)七、Spring注解配置 (16)7.1组件扫描功能 (16)7.2组件扫描的使用方法 (16)7.3注入注解标记使用方法 (17)7.4 AOP注解标记使用方法 (17)八、Spring对数据访问技术的支持 (19)8.1 Spring提供了统一的异常处理类型 (19)8.2 Spring提供了编写DAO的支持类 (19)8.3 Spring提供了声明式事务管理方法 (19)8.4 Spring框架如何使用JDBC技术 (19)8.5连接池优点 (22)8.6 Spring框架如何使用Hibernate技术 (22)8.7 Spring+Hibernate如何使用Session、Query等对象 (25)8.8 Spring框架和Struts2整合应用 (25)8.9案例:采用SSH结构重构资费管理模块 (27)九、整合开发包 struts-spring-plugin.jar (32)9.1 Struts2创建对象的方式 (32)9.2 struts-spring-pligin.jar创建对象的方式 (32)9.3 struts-spring-plugin.jar的内部实现 (32)9.4原理图 1 (32)9.5原理图 2 (33)9.6注意事项 (33)9.7注入规则 (33)十、Spring的事务管理 (34)10.1声明式事务管理(基于配置方式实现事务控制) (34)10.2编程式事务管理(基于Java编程实现事务控制),不推荐用! (35)10.3 Spring中常用的事务类型 (35)十一、Spring的MVC (37)11.1 Spring MVC的体系结构 (37)11.2 Spring MVC的工作流程 (37)11.3案例:简易登录(基于XML配置,不推荐使用) (37)11.4案例:修改11.3案例(基于注解配置,推荐使用) (39)十二、其他注意事项 (41)12.1 Spring的核心模块 (41)12.2表单中action属性的相对、绝对路径问题 (41)12.3用SSH重构NetCTOSS项目模块的步骤 (41)一、Spring概述我们学习Spring框架的最终目的是用它整合Struts2、Hibernate框架(SSH)。
SpringBoot学习总结
SpringBoot区别Springboot是springMVC的升级版,两者没有必然联系,可直接学习springBoot,springBoot是伴随着Spring4.0诞生的SpringBoot的特点1.化繁为简,简化配置2.备受关注,是下一代框架3.微服务的入门级框架(微服务是当下比较流行的架构spring为微服务架构提供了一整套组件,统称为SrpingCloud,,springcloud是建立在springBoot的基础之上的)4.使编码变得简单,使配置变得简单,使部署变得简单,使监控变得简单程序配置引入jar包启动类上班必须有@SpringBootApplication注解,controller类要加@RestController注解,方法上注解与模板讲解:@Controller注解:处理http请求@RestController注解:Spring4之后新加的注解,等同于返回json注解的@ResponseBody+controller注解的组合注解@RequestMapping注解:配置url配置@PathVariable 获取url中的数据@RequestParam 获取请求参数的值如果仅仅使用@Controller,返回的字符串就是页面的名称,需要加入srping官方的模板引擎,在属性配置application.properties为springboot的默认配置文件,可配置端口server.port=8081可配置项目路径server.context-path=/gril ,访问路径时的路径就变成localhost:8081/gril/controller名称application.yml文件是springboot的另一种配置文件,这种文件可以减少重复值(推荐,注意:冒属性映射到bean创建Gril.java的java文件,类上加@Component和@ConfigurationProperties(prefix="gril"),创建private String name;和private Integer age;属性创建get和set方法,获取配置文件前缀是gril 的配置映射到javabean属性中,在controller中注入这个bean@Autowired Girl gril ;如果有多个配置文件比如application.yml,application-A.yml和application-B.yml,如果想使用B数据库操作JAP(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有hibernate,toplink等Spring Boot中使用Swagger2构建强大的RESTful API文档由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot 的用户会用来构建RESTful API。
SpringBoot学习资料.doc
SpringBoot一、 Spring介绍1.1 、 SpringBoot 简介在您第 1 次接触和学习 Spring 框架的时候,是否因为其繁杂的配置而退却了?在你第n 次使用 Spring 框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot 来让你更易上手,更简单快捷地构建 Spring 应用!Spring Boot 让我们的 Spring 应用变的更轻量化。
比如:你可以仅仅依靠一个Java 类来运行一个 Spring 引用。
你也可以打包你的应用为jar 并通过使用 java -jar 来运行你的 Spring Web 应用。
Spring Boot 的主要优点:为所有 Spring 开发者更快的入门开箱即用,提供各种默认配置来简化项目配置内嵌式容器简化 Web项目没有冗余代码生成和XML配置的要求本章主要目标完成Spring Boot 基础项目的构建,并且实现一个简单的Http 请求处理,通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。
1.2 、系统要求:Java 7 及以上Spring Framework 4.1.5 本文采用 Java 1.8.0_73及以上、 Spring Boot 1.3.2 调试通过。
二、快速入门2.1 、创建一个Maven 工程名为” springboot-helloworld” 类型为Jar工程项目2.2 、 pom文件引入依赖<parent ><groupId >org.springframework.boot</ groupId ><artifactId>spring-boot-starter-parent</ artifactId<version >1.3.3.RELEASE </ version ></ parent ><dependencies ><! — SpringBoot web组件--><dependency ><groupId >org.springframework.boot</ groupId ><artifactId>spring-boot-starter-web</ artifactId </ dependency ></ dependencies > > >spring-boot-starter-parent 作用在 pom.xml 中引入 spring-boot-start-parent,spring官方的解释叫什么stater poms,它可以提供也就是说依赖管理,引入以后在申明其它dependency 的时候就不需要version了,后面可以看到。
最全面的Spring学习笔记
最全⾯的Spring学习笔记致⼒于提供⼀种⽅法管理你的业务对象。
在⼤量Java EE的应⽤中,随处可见Spring。
今天我将简单的介绍⼀下Spring这个框架。
本⽂适合读者:想学Spring的Java开发者刚⽤Spring不久的⼈Why为什么要使⽤Spring?Spring主要两个有功能为我们的业务对象管理提供了⾮常便捷的⽅法:DI(Dependency Injection,依赖注⼊)AOP(Aspect Oriented Programming,⾯向切⾯编程)Java Bean每⼀个类实现了Bean的规范才可以由Spring来接管,那么Bean的规范是什么呢?必须是个公有(public)类有⽆参构造函数⽤公共⽅法暴露内部成员属性(getter,setter)实现这样规范的类,被称为Java Bean。
即是⼀种可重⽤的组件。
DI-依赖注⼊简单来说,⼀个系统中可能会有成千上万个对象。
如果要⼿⼯维护它们之间的关系,这是不可想象的。
我们可以在Spring的XML⽂件描述它们之间的关系,由Spring⾃动来注⼊它们——⽐如A类的实例需要B类的实例作为参数set进去。
AOP-⾯向切⾯编程就以⽇志系统为例。
在执⾏某个操作前后都需要输出⽇志,如果⼿⼯加代码,那简直太可怕了。
⽽且等代码庞⼤起来,也是⾮常难维护的⼀种情况。
这⾥就需要⾯向切⾯来编程How关于BeanBean的⽣命周期如你所见,在bean准备就绪之前,bean⼯⼚执⾏了若⼲启动步骤。
我们对图进⾏详细描述:1. Spring对bean进⾏实例化;2. Spring将值和bean的引⽤注⼊到bean对应的属性中;3. 如果bean实现了BeanNameAware接⼝,Spring将bean的ID传递给setBean-Name()⽅法;4. 如果bean实现了BeanFactoryAware接⼝,Spring将调⽤setBeanFactory()⽅法,将BeanFactory容器实例传⼊;5. 如果bean实现了ApplicationContextAware接⼝,Spring将调⽤setApplicationContext()⽅法,将bean所在的应⽤上下⽂的引⽤传⼊进来;6. 如果bean实现了BeanPostProcessor接⼝,Spring将调⽤它们的post-ProcessBeforeInitialization()⽅法;7. 如果bean实现了InitializingBean接⼝,Spring将调⽤它们的after-PropertiesSet()⽅法。
springboot学习(六)springboot各版本中使用log4j2记录日志
springboot学习(六)springboot各版本中使⽤log4j2记录⽇志spring boot 各版本中使⽤ log4j2 记录⽇志前⾔Spring Boot中默认⽇志⼯具是logback,只不过我不太喜欢logback。
为了更好⽀持 spring boot 框架,我使⽤log4j。
spring boot 各版本与 log4j 的⽀持情况1. spring boot 1.2.X 版本spring boot 1.2.X版本⼀般建议使⽤默认⽇志⼯具(logback),也可以使⽤ log4j。
但,注意的是:Spring Boot 1.2.4.RELEASE包含⼀个bug,。
所以,当你通过application.properties定义⽇志级别时,该错误会更改⽗记录器级别,在最差情况下会更改根记录器级别。
虽然这个bug是修复在1.2.6.RELEASE,我建议⾄少使⽤1.2.8.RELEASE(如果你想坚持1.2.x)。
因为 spring boot 现在仍然在快速发展阶段,版本更新较快,有时候就会因为版本问题⽽出现各种奇奇怪怪的bug。
2. spring boot 1.3.X 版本spring boot 从 1.3.X 版本开始⽀持slf4j+log4j/log4j2。
* ⾸先,先解决为什么使⽤ SL4J Facade?对于这个问题,⽹上已经有许多精彩地点答案了,我就直接附上其中⼀篇的地址了:。
同时,附上⼀张⼯作流程图:然后,就是在⾃⼰的 springboot 项⽬中使⽤ log4j。
补充⼀下,由于⽅法⼀样,我将slf4j+log4j2放到了1.4.X版本中来应⽤。
1.创建⼀个1.3.X版本的 spring boot 项⽬(记得排除logback-classic的依赖)。
12 3 4 5 6 7 8 9 10<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId> </exclusion></exclusions></dependency>2.引⼊ SL4J 依赖。
JavaSpringBoot如何使用IdentityServer4作为验证服务器学习笔记
上面的 ApiNameSecretbase64 的功能是读取配置中的信息,返回编码好的 Api Name 和 Secret, 下面是我application.properties相关的配 置,同样这些配置需要放到IdentityServer那边,可以是通过内存的方式也可以是通过像我一样使用 UI管理界面直接添加:
JavaSpringBoot如何使用 IdentityServer4作为验证服务器学习笔 记
这边记录下如何使用IdentityServer4 作为 Java SpringBoot 的 认证服务器和令牌颁发服务器。本人也是新手,所以理解不足的地方请多多指教。另外由于真的 很久没有写中文了,用词不太恰当的地方也欢迎新手大佬小伙伴指出,一起进步。另外这边令牌的获取需要手动使用postman根据令牌端点获取,然后放在请求 头里面通过postman发给Java的demo,本身这个demo没有取令牌的功能,请各位注意。
#IdentityServer4 配置文件参数 = Api1 api.secret=secreta
由于没有客户端,这边用postman代替求取token,使用http://x.x.x.x:5000/connect/token,然后给我们的java程序发起请求。
Neo4j学习笔记-SpringBoot集成简单示例
35.
return date;
36. }
37. public void setDate(Date date) {
38.
this.date = date;
39. }
40. public TransactionUser getTransactionUser1() {
41.
return transactionUser1;
简单的交易示例如下:
1. package org.platform.modules.transaction.entity;
2. import org.neo4j.ogm.annotation.GeneratedValue;
3. import org.neo4j.ogm.annotation.Id;
4. import org.neo4j.ogm.annotation.NodeEntity;
20. private String neo4jPassword = null;
21. @Value("${spring.data.neo4j.storedir}")
22. private String neo4jStoreDir = null;
23. @Bean
24. public org.neo4j.ogm.config.Configuration getConfiguration(){
40. public void setAccountNo(String accountNo) {
41.
this.accountNo = accountNo;
42. }
43. public String getAccountName() {
44.
spring和springboot常用注解总结
spring和springboot常用注解总结@ConfigurationProperties可以非常方便的把资源文件中的内容绑定到对象上@Value("${}")注入简单值@Import通过导入的方式实现把实例加入springIOC容器中MainConfig注解配置中增加@Import注解如下:运行结果:@RequestMapping这个注解可以用于类和方法上,用于类上,表示父路径,如类上是demo,方法上是/demo1,那么访问路径就是demo/demo1该注解有六个属性:params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
value:指定请求的实际地址,指定的地址可以是URI Template 模式method:指定请求的method类型, GET、POST、PUT、DELETE等consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回@PathVariable对应路径上的变量,用在参数前,路径上的变量名需和参数名称一致RequestMapping("demo/demo1/{name}")public String say(@PathVariable String name){}@RequestHeader@ApiOperation(value = "更新用户", notes = "更新用户")@PutMapping("/user/updateUser")public void updateUser(@RequestHeader("Authorization") String authorization);@RequestParam和以下代码的作用相同String name =request.getParameter("name ")。
SpringBoot同步笔记
SpringBoot同步笔记第⼀个SpringBoot程序环境jdk 1.8maven 3.6.1springboot最新版2.4.0IDE:IDEA1. 官⽹直接⽣成springboot项⽬,然后导⼊到IDEA(正常开发不会⽤)2. IDEA新建springboot项⽬--File-New Project--Spring initializr原理初探⾃动配置:pom.xmlspring-boot-dependencies:核⼼依赖在⽗⼯程中在引⼊⼀些springboot依赖的时候,不需要指定版本,因为有版本仓库启动器<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>这个是⼀个web启动器启动器,是springboot的启动场景spring-boot-starter-web会帮我们⾃动导⼊web环境的所有依赖springboot将所有的功能场景,都变成⼀个个启动器要使⽤什么功能,找到对应的启动器就可以主程序//@SpringBootApplication:标注这个类是⼀个springboot应⽤@SpringBootApplicationpublic class Springboot01HelloApplication {public static void main(String[] args) {//将springboot应⽤启动SpringApplication.run(Springboot01HelloApplication.class, args);}}@SpringBootConfiguration: springboot配置@Configuration:spring配置类@Component:说明是⼀个spring组件@EnableAutoConfiguration:⾃动配置@AutoConfigurationPackage: ⾃动配置包@Import({AutoConfigurationImportSelector.class}) :导⼊类AutoConfigurationImportSelector选择了什么getAutoConfigurationEntry()获得⾃动配置的实体(调⽤了⽅法*)*getCandidateConfigurations()获得候选的配置getSpringFactoriesLoaderFactoryClass()标注了EnableAutoConfiguration注解的类List<String> loadFactoryNames()获取所有的加载配置META-INF/spring.factories:⾃动配置的核⼼⽂件结论:springboot所有⾃动配置都是在启动的时候扫描并加载 spring.factories(所有的⾃动配置类都在这⾥⾯,但是不⼀定会⽣效,要判断条件是否成⽴),只要导⼊了对应的start,就有对应的启动器,有了启动器,⾃动装配就会⽣效,然后配置成功1. springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值2. 将这些⾃动配置的类导⼊容器,⾃动配置就会⽣效3. 解决⽅案和⾃动配置的东西都在spring-boot-autoconfigure-2.4.0.jar下yaml可以直接给实体类赋值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10分钟创建一个SB应用:1.创建项目2将springboot的版本改为1.5.6(不修改后面操作数据库会报类找不到)<version>1.5.6.RELEASE</version>3.pom.xml中配置3个数据库相关的内容4.在入口文件增加注解(不注解会导致mapper识别不到):@MapperScan("com.example.demo.mapper")5.创建generator/generatorConfig.xml文件,并修改数据库账号密码、包名、表名6.修改application.yml,增加数据源相关的配置7.创建一个maven的Run配置,设置mybatis-generator:generate -e8.编写Service接口和Service实现类9.编写Controller和方法10.启动应用创建项目https:///lom9357bye/article/details/69677120通过tomcat部署项目https:///PJH-Forever/p/8026330.htmlspring boot configuration annotation proessor not found in classpath引入如下依赖:<dependency><groupId> org.springframework.boot </groupId><artifactId> spring-boot-configuration-processor </artifactId><optional> true </optional></dependency>pom.xml中的parent只有parent设置了,后面的才不用写version;没有在parent中设置的,后面必须写version,否则只会下载一个unknown的错误包一些tips:spring boot 2.0相比1.5.x,变更比较大,一些类去除了,因此要注意不同版本的api如果在generatorConfig.xml中配置了某个表,但是没有用到,那么程序起来的时候会报错;删除即可Durid包含的主要功能:1)使用StaFilter插件进行监控数据库访问性能2)替换DBCP和C3P0,提供一个高效、可扩展的数据库连接池3)支持数据库密码的加密4)SQL执行日志5)提供了一个监控页面,可以查看sql情况控制器中通过@RequestBody获取POST参数报错:{"timestamp":1527154727083,"status":415,"error":"Unsupported Media Type","exception":"org.springframework.web.HttpMediaTypeNotSupportedException","message": "Content type 'application/json;charset=UTF-8' not supported","path":"/recomd/add"}经过排查,发现是参数中的类Recommend里面,有2个setIndexList()方法:setIndexList(List xxx);setIndexList(ArrayList xxx);删除一个就正常了,猜测是RequestBody在组装Recommend这个参数类的时候,无法判断该用哪一个set方法,从而报错了这应该算是框架的一个bug了Field userMapper in erServiceImpl required a bean of type 'erMapper' that could not be found.原因是在入口文件XxxApplication中,少加了一个注解:@MapperScan("com.zhouchangju.mapper")将项目启动方式从XxxApplication改为Artifact后,访问页面都是4041.没有将pom.xml里面的启动方式从jar改为war2.XxxApplication类没有继承自SpringBootServletInitializer类extends SpringBootServletInitializer安全插件配置url的时候,不用加artifactid比如项目叫做daily,我设置antMatchers的时候,不用加daily这一截:/**定义安全策略*/@Overrideprotected void configure(HttpSecurity http) throws Exception {//配置安全策略http.authorizeRequests()//定义/请求不需要验证.antMatchers("/","/**/*.css","/**/*.js","/**/*.jpg","/**/*.png","/**/*.jpeg","/user/getdynamicpassword","/user/login","/login.html").permitAll().anyRequest().authenticated()//其余的所有请求都需要验证.and().logout().permitAll()//定义logout不需要验证.and().formLogin()//使用form表单登录.loginPage("/login.html").failureUrl("/login?error=true");}本地开发时,Security验证的接口,总是报403需要在SecurityConfig中关闭csrf:.csrf().disable()Edit Configration时,没有Tomcat Serversettings->Build,Execution,Deploment->右侧ApplicationServer->添加本地tomcat信息误删了项目模块文件xxx.iml怎么办?可以在Project Structure里面的module里面,重新导入模块,注意每一步都是import,不是createKafkaConsumer is not safe for multi-threaded access配置文件中的属性无法加载: require a bean of type ng.String that could not be found 是因为写了一个带有String参数的构造函数导致的,删除构造函数即可解决,详见:https:///questions/40670099/im-not-including-the-java-lang-string-bean maven编译项目,报错:cannot find symbol原因是svn上面代码不全,缺少了一些文件如何修改打包后的war文件的存放位置?由于maven遵循“约定优先于配置”的思想,所以如果不做特殊配置,它默认是把打包之后产生的文件都放在target目录下的。
要想改变此默认行为,我们修改在项目中的pom.xml文件。
在此项目中,添加如下配置:<build><plugins><!-- 更改maven默认的打包目录 --><plugin><artifactId>maven-war-plugin</artifactId><configuration><webappDirectory>${basedir}/src/main/webapp</webappDirectory><warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory></configuration></plugin></plugins></build>查看maven的配置文件路径mvn -X内网4.62构建maven编译环境遇到的问题虽然配置了aliyun的源,但是某些源的依赖里面,注明了要从中央仓库取依赖包,比如spring-boot-maven-plugin遇到这种情况,只能手动下载好这些包,然后上传到4.62的本地仓库里面去,记得删除repositories文件maven编译项目报错:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?1.java的环境变量配置有误2.环境变量配置后,在之前打开的窗口中执行命令,导致javac识别不到(在之前的窗口source /etc/profile一下就行了)调用mapper类的方法,提示:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)application.yml里面缺少数据池相关的配置:mybatis:mapper-locations: classpath:mapping/*.xmltype-aliases-package: com.example.demo.model操作数据库时,Mapper对象报空指针异常application.yml里面缺少数据池相关的配置注意,用了dataSource后,是先初始化数据源,然后应用程序从数据库连接池里面获取数据库连接来操作DB,这个设计要理解才行idea打的jar包,运行提示“没有主清单属性的解决”https:///u011624972/article/details/58591825idea打的jar包,运行提示“错误: 找不到或无法加载主类mine.QrApplication”springboot代码中的相对路径是以项目根目录为准的比如infomine这个项目,./data对应的是infomine/data目录。