您的位置:澳门皇家赌场真人在线 > 皇家赌场游戏 > 玩转vue前进刷新,idea热更新应用方案

玩转vue前进刷新,idea热更新应用方案

发布时间:2019-10-07 01:00编辑:皇家赌场游戏浏览(159)

    但惟独的keep-alive妹子是升高后退都不会刷新的,所以须要改换一下,让它乖乖听话。这一个历程须求路由小哥的路由参数meta合营大家。

    接待Java程序猿朋友们参与Java进级框架结构学习调换:952124565

    • IMAP协议

    图片 1image

    1、POM文件

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version></parent>他的父项目是<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.9.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath></parent>他来真正管理Spring Boot应用里面的所有依赖版本;
    

    Spring Boot的本子仲裁中央;

    尔后大家导入正视暗中同意是不供给写版本;(未有在dependencies里面管理的依赖自然须求证明版本号)

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>
    

    spring-boot-starter-==web==:

    ​ spring-boot-starter:spring-boot场景运维器;帮大家导入了web模块正常运营所依附的零件;

    Spring Boot将具有的效果与利益场景都收抽出来,做成叁个个的starters,只供给在品种里面引进那些starter相关场景的持有信任都会导入进来。要用什么成效就导入什么情况的运维器

    1.列表页步向详细的情况页重回列表页时列表不能够刷新,连页数、筛选标准等都不可能变

    请牢记,你还嫩的多。在那一个品级,你早晚已经知道Java是运作在JVM之上的。所以,对于JVM,你从未任何理由不了然它。其他,在过去2年的劳作中间,你一定或多或少接触过出现。那个时候,你应有去进一步深远的打听并发相关的知识。

    有关数据传输

    基本上人都晓得,电子邮件的传输选择了Base64编码对邮件内容开展包装,那是一种基于陆15个可打印字符来代表二进制数据的点子。

    图片 2image

    如上是Base64编码的字符映射表,65个字符可对应6个bit位。二个字节是8个bit位,那么3个字节刚好须要4个Base64的字符来表示,而3个字节也是Base64编码的一丁点儿单位,在编码进程中对于不足的片段应用"="号来补齐,如下:

    图片 3image

    别的一个索要驾驭的说道是MIME(Multipurpose Internet Mail Extensions),即多用途互连网邮件扩张在眼前介绍SpringBoot-MiMe类型管理的稿子中涉及过,那是一种用来定义文书档案性质及格式的正统。一段内容,是文件、图片、音频,照旧二进制,都由此MIME类型来展开宣示和剖判。

    常见的MIME

    内容 后缀 MIME
    普通文本 .txt text/plain
    RTF文本 .rtf application/rtf
    PDF文档 .pdf application/pdf
    Word文件 .word application/msword
    PNG图像 .png image/png
    GIF图形 .gif image/gif
    JPEG图形 .jpg image/jpeg

    SpringBoot 是叁个脚手架,邮件作用实在是由此 JavaMail来兑现的。JavaMail是Java实现邮件收发功效的标准组件,其提供了一组简便的API来促成邮件管理,相同的时候也支撑各样认证合同。这里不对JavaMail 做打开介绍,由于有了SpringBoot,完结八个邮件发送功效变得特简单。

    上面将显得多少个例证,包含:

    • 采纳springboot 发送文书邮件;
    • 怎么发送带附属类小部件的邮件;
    • 怎么样行使 thymeleaf 发送模板邮件,支持HTML格式。

    测验处境:spring boot + beetl模板引擎 工具:idea在类型的开发银行类 点击编辑 设置下图 状态为:Update classes and resources就能够

    2)、国际化

    1)、编写国际化布局文件;

    2)、使用ResourceBundleMessageSource管理国际化财富文件

    3)、在页面使用fmt:message抽出国际化内容

    步骤:

    1)、编写国际化布局文件,收取页面需求出示的国际化音讯

    图片 4搜狗截图20180211130721.png

    2)、SpringBoot自动配置好了管制国际化财富文件的零部件;

    @ConfigurationProperties(prefix = "spring.messages")public class MessageSourceAutoConfiguration { /** * Comma-separated list of basenames (essentially a fully-qualified classpath * location), each following the ResourceBundle convention with relaxed support for * slash based locations. If it doesn't contain a package qualifier (such as * "org.mypackage"), it will be resolved from the classpath root. */ private String basename = "messages"; //我们的配置文件可以直接放在类路径下叫messages.properties; @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); if (StringUtils.hasText(this.basename)) { //设置国际化资源文件的基础名(去掉语言国家代码的) messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray( StringUtils.trimAllWhitespace(this.basename))); } if (this.encoding != null) { messageSource.setDefaultEncoding(this.encoding.name; } messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale); messageSource.setCacheSeconds(this.cacheSeconds); messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat); return messageSource; }
    

    3)、去页面获得国际化的值;

    图片 5搜狗截图20180211134506.png

    <!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>Signin Template for Bootstrap</title> <!-- Bootstrap core CSS --> <link href="asserts/css/bootstrap.min.css" th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}" rel="stylesheet"> <!-- Custom styles for this template --> <link href="asserts/css/signin.css" th:href="@{/asserts/css/signin.css}" rel="stylesheet"> </head> <body > <form action="dashboard.html"> <img th:src="@{/asserts/img/bootstrap-solid.svg}" src="asserts/img/bootstrap-solid.svg" alt="图片 6" width="72" height="72"> <h1 th:text="#{login.tip}">Please sign in</h1> <label th:text="#{login.username}">Username</label> <input type="text" placeholder="Username" th:placeholder="#{login.username}" required="" autofocus=""> <label th:text="#{login.password}">Password</label> <input type="password" placeholder="Password" th:placeholder="#{login.password}" required=""> <div > <label> <input type="checkbox" value="remember-me"/> [[#{login.remember}]] </label> </div> <button type="submit" th:text="#{login.btn}">Sign in</button> <p >© 2017-2018</p> <a >中文</a> <a >English</a> </form> </body></html>
    

    效率:依据浏览器语言设置的信息切换了国际化;

    原理:

    ​ 国际化Locale;LocaleResolver;

     @Bean @ConditionalOnMissingBean @ConditionalOnProperty(prefix = "spring.mvc", name = "locale") public LocaleResolver localeResolver() { if (this.mvcProperties .getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) { return new FixedLocaleResolver(this.mvcProperties.getLocale; } AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver(); localeResolver.setDefaultLocale(this.mvcProperties.getLocale; return localeResolver; }默认的就是根据请求头带来的区域信息获取Locale进行国际化
    

    4)、点击链接切换国际化

    /** * 可以在连接上携带区域信息 */public class MyLocaleResolver implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { String l = request.getParameter; Locale locale = Locale.getDefault(); if(!StringUtils.isEmpty{ String[] split = l.split; locale = new Locale(split[0],split[1]); } return locale; } @Override public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { }} @Bean public LocaleResolver localeResolver(){ return new MyLocaleResolver(); }}
    

    图片 7

    java学习这一有的其实也算是前几天的重要,这一片段用来解惑比较多群里的爱侣所问过的主题材料,那正是本身你是何许学习Java的,能或不能够给点提议?所以本身后天先简单描述一下每一个阶段要学习的剧情。下面临于的引入内容,目标是让您尽快产生贰个方可加入专门的学问的Java开拓者,更适用于处于无业状态,打算转行Java的同桌。 倘令你是在校学员,务要求在学好基础(举个例子计算机种类、算法、编写翻译原理等等)的前提下,再思考去实行下边包车型地铁读书。

    图片 8image

    二个使用应该是一组Mini服务;可以透过HTTP的法子展开互通;

    图片 9

    本群提供无需付费的学习指引 以上架构资料 以及解答

    E. 发送Html邮件

    大多邮件都包涵了增加的公文样式,那是因而HTML邮件完毕的。对于此类现象的通用做法是利用模板来发送,应用程序只关注模型数据的传参就能够。

    SpringBoot 可应用 thymeleaf 页面引擎来兑现HTML的沙盘,首先须求引进thymeleaf

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>${spring-boot.version}</version></dependency>
    

    继而新建一个模板,/src/main/resources/templates/mail/template.html

    <html><body><h4 th:text="|Hi, ${customer}, these're your pets|"></h4><hr></hr><table> <tr> <th>name</th> <th>type</th> <th>age</th> </tr> <tr th:each="p : ${pets}"> <td th:text="${p.name}"></td> <td th:text="${p.type}"></td> <td th:text="${p.age}"></td> </tr></table></body></html>
    

    上边包车型地铁模板中是一个宠物列表的页面,宠物模型定义:

    public static class Pet { private String name; private String type; private int age; public Pet(String name, String type, int age) { super(); this.name = name; this.type = type; this.age = age; }...
    

    小编们在出殡和埋葬邮件时,须求流入宠物列表数据,代码如下:

    @Servicepublic class SimpleMailSender { /** * 日志工具 */ private static final Logger logger = LoggerFactory.getLogger(MailService.class); @Autowired private JavaMailSender mailSender; @Autowired private TemplateEngine templateEngine; @Autowired private Environment environment; private void sendTemplateMail() throws MessagingException { String from = environment.getProperty("spring.mail.from"); String to = environment.getProperty("spring.mail.to"); // 使用Mime消息体 MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom; helper.setTo; helper.setSubject("first html report from yourself"); // 根据模板、变量生成内容 // 数据模型 List<Pet> pets = new ArrayList<Pet>(); pets.add(new Pet("Polly", "Bird", 2)); pets.add(new Pet("Tom", "Cat", 5)); pets.add(new Pet("Badboy", "Dog", 3)); Context context = new Context(); context.setVariable("customer", "LiLei"); context.setVariable("pets", pets); String text = templateEngine.process("mail/template", context); helper.setText(text, true); mailSender.send; }}
    

    开端应用,发送邮件后的功能:

    图片 10image

    选择 thymeleaf 能够高速的创设出贰个Html模板,不时候大家必要在邮件中展现一张图纸,如何是好吧?

    1. 使用img标签,并内定贰个在线的图片;此方案相比较通用,应该说大大多在线平台都应用这种做法,但那样做的前提是亟需有一个集合的图样存款和储蓄及拜候系统。

    2. 使用 Base64编码,在页面中放到编码后的剧情:

    <img width="100" height="100" src="data:image/jpg;base64,/9dxxFEF8fEkqAAgAAAAL===" />
    

    该方案非通用,在实地衡量中窥见Outlook 不能够出示那类标签,顾客端从未扶助。上面罗列了支撑内嵌图片显示的部分邮件顾客端:

    图片 11image

    1. 利用CID 方案,图片作为内嵌能源

    CID就是ContentID,是一种在MIME新闻体中用于定义并引用内容块的机制。PAJEROFC2392 对那些进行了定义。

    三个带CID的新闻体如下所示:

    --boundary-example 1Content-Type: Text/HTML; charset=US-ASCIIto the other body part, for example through a statement such as:<IMG SRC="cid:foo4*foo1@bar.net" ALT="IETF logo">--boundary-example-1Content-ID: <foo4*foo1@bar.net>Content-Type: IMAGE/GIFContent-Transfer-Encoding: BASE64R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4Aetc...
    

    那便是说,使用CID内嵌图片的做法如下:

    步骤一

    在出殡和埋葬邮件时钦定带 CID 的 Resource

     String text = templateEngine.process("mail/template", context); helper.setText(text, true); helper.addInline("soft", new FileSystemResource("D:/temp/soft.png")); mailSender.send;
    

    步骤二步骤:模板中引用对应的CID,如下:

    <img src="cid:soft"></img>
    

    最终,发送邮件可协理图片的来得,如下

    图片 12image

    spring.io-mailspringboot-mail.propertiessend-a-base64-image-in-html-email

    款待继续关切"美码师的补习体系-springboot篇" ,期望更加多突出内容-

    图片 13image

    1、自动配置原理:

    1)、SpringBoot运行的时候加载主配置类,开启了自行配置功用==@EnableAutoConfiguration==

    2)、@EnableAutoConfiguration 作用:

    • 利用EnableAutoConfigurationImportSelector给容器中程导弹入一些组件?

    • 能够查阅selectImports()方法的剧情;

    • List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);获取候选的布局

      • SpringFactoriesLoader.loadFactoryNames()扫描全数jar包类路线下 META-INF/spring.factories把围观到的这几个文件的内容包装成properties对象从properties中拿走到EnableAutoConfiguration.class类对应的值,然后把他们增添在容器中

    ==将 类路线下 META-INF/spring.factories 里面配备的全部EnableAutoConfiguration的值加入到了容器中;==

    # Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration
    

    每多个这么的 xxxAutoConfiguration类都以容器中的一个组件,都加入到容器中;用他们来做活动配置;

    3)、每多个机关配置类实行自动配置成效;

    4)、以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理;

    @Configuration //表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件@EnableConfigurationProperties(HttpEncodingProperties.class) //启动指定类的ConfigurationProperties功能;将配置文件中对应的值和HttpEncodingProperties绑定起来;并把HttpEncodingProperties加入到ioc容器中@ConditionalOnWebApplication //Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效; 判断当前应用是否是web应用,如果是,当前配置类生效@ConditionalOnClass(CharacterEncodingFilter.class) //判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true) //判断配置文件中是否存在某个配置 spring.http.encoding.enabled;如果不存在,判断也是成立的//即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;public class HttpEncodingAutoConfiguration { //他已经和SpringBoot的配置文件映射了 private final HttpEncodingProperties properties; //只有一个有参构造器的情况下,参数的值就会从容器中拿 public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) { this.properties = properties; } @Bean //给容器中添加一个组件,这个组件的某些值需要从properties中获取 @ConditionalOnMissingBean(CharacterEncodingFilter.class) //判断容器没有这个组件? public CharacterEncodingFilter characterEncodingFilter() { CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter(); filter.setEncoding(this.properties.getCharset; filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST)); filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE)); return filter; }
    

    遵照当前不可同日而语的尺码决断,决定以此配置类是或不是见效?

    一但以此布局类生效;那一个布局类就能够给容器中加上各类零部件;那一个零部件的品质是从对应的properties类中获得的,这几个类里面的每一个性子又是和布局文件绑定的;

    5)、全体在安顿文件中能配置的品质都以在xxxxProperties类中封装者‘;配置文件能配备如何就能够参照有个别意义对应的那几个属性类

    @ConfigurationProperties(prefix = "spring.http.encoding") //从配置文件中获取指定的值和bean的属性进行绑定public class HttpEncodingProperties { public static final Charset DEFAULT_CHARSET = Charset.forName;
    

    精髓:

    1)、SpringBoot运营会加载多量的电动配置类

    2)、大家看大家供给的意义有未有SpringBoot暗中认可写好的全自动配置类;

    3)、大家再来看这么些自动配置类中终归配置了何等组件;(只要我们要用的零部件有,大家就无需再来配置了)

    4)、给容器中自动配置类加多组件的时候,会从properties类中获得有些品质。大家就能够在陈设文件中钦赐这么些属性的值;

    xxxxAutoConfigurartion:自动配置类;

    给容器中增多组件

    xxxxProperties:封装配置文件中相关属性;

    1、具有工作经历的,面对当下风行的能力不知从何出手,需求突破技艺瓶颈的能够加。

    因为在前3年的进度中,你早晚或多或少接触过一些别的的技术,比方大数量、布满式缓存、遍布式新闻服务、分布式总结、软负载均衡等等。

    D.发送附属类小部件

    基于前面发送文书的事例,完成附属类小部件发送的代码如下:

     private void sendAttachment() throws MessagingException { String from = environment.getProperty("spring.mail.from"); String to = environment.getProperty("spring.mail.to"); // 使用Mime消息体 MimeMessage message = mailSender.createMimeMessage(); // multipart参数为true,表示需要发送附件 MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom; helper.setTo; helper.setSubject("first file from yourself"); helper.setText("check the file"); //指定系统文件 File file = new File("D:\temp\attachment.xlsx"); FileSystemResource resource = new FileSystemResource; helper.addAttachment(file.getName(), resource); mailSender.send; logger.info("send attachment done"); }
    

    一律,运营应用并发送邮件后,在收件邮件中赢得了附属类小部件:

    图片 14image

    条件约束

    不知怎么做的白萝卜眼泪成河,啊!不,是流成一片湖

    2.等您写上几天程序之后,你频仍会相比模糊,因为你写的东西就好像看起来不要用处,比方实现一个简便的总结器,读取二个文件等。那个时候你就应该去学着写一些令你感到风趣的东西了,所以您应有学学更加多的学识。你能够去依据摄像去一丢丢去学学,一定要多动手。原来本人也是准备出教学录像的,但是出于时间难题,依然调节放任了。不过借令你看录像的经过中遇见了难题,招待来笔者的调换群提问。

    SMTP 是 Simple Mail Transfer Protocol 的简称,即轻巧邮件传输左券,是出殡和埋葬合同。它定义了一组从源地址到目标地址传输邮件的典型,并协助在传递进程中通过分裂互连网主机完结中间转播及传送。

    1、成立一个maven工程;

    在页面包车型大巴activated(开启了 keepAlive: true的页面在第一次步向时是不能触发mounted发法的)方法中依据ifDoFresh字段判定是不是刷新页面。

    4.当你学会Web开拓从此,那一年你还不足以出席职业,你还供给继续读书。公司里为了抓好开垦的频率,会使用部分Java Web框架,因而你还要求上学一些开辟框架。近来比较主流的是SSM框架,即spring、springmvc、mybatis。

    电子邮件协议是基于TCP层定义的,首要有下边多少个:

    4、编写相关的Controller、Service

    @Controllerpublic class HelloController { @ResponseBody @RequestMapping public String hello(){ return "Hello World!"; }}
    

    再者向本人甩出三个亲信你行的小表情

    第五片段:临场职业4年到5年的同校通过后面一年的历练,相信你在融洽所研商的天地曾经有了友好一定的视角,那一年,技能上你应有早已遭遇瓶颈了。这年不要心急升高和煦的技艺,已是时候增进你的影响力了,你能够品味去部分名牌的合营社去巩固你的背景,你可以发布一些稿子去影响越来越多的人。当然,你也能够去Github创建三个属于您的开源项目,去制作和煦的成品。

    • SMTP协议

    2、占位符获取在此以前布署的值,若无得以是用:钦赐暗中认可值

    person.last-name=张三${random.uuid}person.age=${random.int}person.birth=2017/12/15person.boss=falseperson.maps.k1=v1person.maps.k2=14person.lists=a,b,cperson.dog.name=${person.hello:hello}_dogperson.dog.age=15
    

    3、若无专门的学业经验,但基础极度踏实,对java专业机制,常用设计思想,常用java开拓框架精通熟识的,能够加。

    第四有个别:在场职业3年到4年的同室那个等第的同室,升高已是很难了,并且以此品级的上学往往会相比较各样化。

    • POP3协议

    1、IDEA:使用 Spring Initializer火速创制项目

    IDE都帮忙使用Spring的品种开创向导快捷创造一个Spring Boot项目;

    分选大家要求的模块;向导会联网创设Spring Boot项目;

    暗中认可生成的Spring Boot项目;

    • 主程序已经转移好了,大家只须求大家自个儿的逻辑
    • resources文件夹中目录结构
      • static:保存全数的静态能源; js css images;
      • templates:保存全体的沙盘页面;(Spring Boot私下认可jar包使用嵌入式的汤姆cat,暗中同意不帮助JSP页面);能够应用模板引擎(freemarker、thymeleaf);
      • application.properties:Spring Boot应用的计划文件;能够修改部分暗许设置;

    <div >

    <keep-alive>

    <router-view v-if="$route.meta.keepAlive"/>

    </keep-alive>

    <router-view v-if="!$route.meta.keepAlive"/>

    </div>

    其次部分:对于列席职业1年到2年的同班。这一部分时刻段的校友,已经对Java有了多个进一步深入的领会。

    A. 加多正视

    spring-boot-starter-mail是三个包装了邮件功用的零件,重视如下:

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>${spring-boot.version}</version></dependency>
    

    2、细节

    效果与利益:必须是@Conditional钦定的准绳建构,才给容器中增多组件,配置配里面包车型地铁具有内容才生效;

    @Conditional扩展注解 作用(判断是否满足当前指定条件)
    @ConditionalOnJava 系统的java版本是否符合要求
    @ConditionalOnBean 容器中存在指定Bean;
    @ConditionalOnMissingBean 容器中不存在指定Bean;
    @ConditionalOnExpression 满足SpEL表达式指定
    @ConditionalOnClass 系统中有指定的类
    @ConditionalOnMissingClass 系统中没有指定的类
    @ConditionalOnSingleCandidate 容器中只有一个指定的Bean,或者这个Bean是首选Bean
    @ConditionalOnProperty 系统中指定的属性是否有指定的值
    @ConditionalOnResource 类路径下是否存在指定资源文件
    @ConditionalOnWebApplication 当前是web环境
    @ConditionalOnNotWebApplication 当前不是web环境
    @ConditionalOnJndi JNDI存在指定项

    机关配置类必需在一定的尺码下技术奏效;

    大家怎么驾驭怎么着自动配置类生效;

    ==大家得以通过启用 debug=true属性;来让调控台打字与印刷自动配置报告==,那样我们就能够很方便的敞亮怎么自动配置类生效;

    =========================AUTO-CONFIGURATION REPORT=========================Positive matches:----------------- DispatcherServletAutoConfiguration matched: - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet'; @ConditionalOnMissingClass did not find unwanted class (OnClassCondition) - @ConditionalOnWebApplication  found StandardServletEnvironment (OnWebApplicationCondition) Negative matches:(没有启动,没有匹配成功的自动配置类)----------------- ActiveMQAutoConfiguration: Did not match: - @ConditionalOnClass did not find required classes 'javax.jms.ConnectionFactory', 'org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition) AopAutoConfiguration: Did not match: - @ConditionalOnClass did not find required classes 'org.aspectj.lang.annotation.Aspect', 'org.aspectj.lang.reflect.Advice' (OnClassCondition) 
    

    小张;开拓三个大型系统;

    ​ 1、System.out.println;将首要数据打字与印刷在调节台;去掉?写在一个文书?

    ​ 2、框架来记录系统的部分运营时新闻;日志框架 ; zhanglogging.jar;

    ​ 3、高大上的多少个效果与利益?异步方式?自动归档?xxxx? zhanglogging-good.jar?

    ​ 4、将原先框架卸下来?换上新的框架,重新修改在此以前相关的API;zhanglogging-prefect.jar;

    ​ 5、JDBC---数据库驱动;

    ​ 写了一个联结的接口层;日志门面;logging-abstract.jar;

    ​ 给品种中程导弹入具体的日记完毕就行了;大家事先的日志框架都以促成的抽象层;

    市道上的日记框架;

    JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....

    日志门面 日志实现
    JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-logging Log4j JUL(java.util.logging) Log4j2 Logback

    左臂选贰个伪装、侧面来选一个完成;

    日志门面: SLF4J;

    日志达成:Logback;

    SpringBoot:底层是Spring框架,Spring框架暗中同意是用JCL;‘

    ==SpringBoot选用 SLF4j和logback;==

    收取眼泪,撸起袖子加油干!第一版傻子式的操作正是将列表页的页数、筛选规范等在详细情况页和编排页来回带。那叫二个累!并且点着点着就跑的没边了。

    由于文笔也可能有限,只好依据本人的精通这样浅显分享给大家。依然一句话不可能去停止学习。作者收拾了一部分文书档案。

    在座谈代码此前,先来询问下邮件的为主左券。

    2、钦赐布署

    给类路线下放上各种日志框架自个儿的配备文件就可以;SpringBoot就不选取他暗中同意配置的了

    Logging System Customization
    Logback logback-spring.xml, logback-spring.groovy, logback.xml or logback.groovy
    Log4j2 log4j2-spring.xml or log4j2.xml
    JDK (Java Util Logging) logging.properties

    logback.xml:直接就被日志框架识别了;

    logback-spring.xml:日志框架就不直接加载日志的陈设项,由SpringBoot深入分析日志配置,能够应用SpringBoot的高档Profile功效

    <springProfile name="staging"> <!-- configuration to be enabled when the "staging" profile is active --> 可以指定某段配置只在某个环境下生效</springProfile>
    

    如:

    <appender name="stdout" > <!-- 日志输出格式: %d表示日期时间, %thread表示线程名, %-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息, %n是换行符 --> <layout > <springProfile name="dev"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n</pattern> </springProfile> <springProfile name="!dev"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== %-5level %logger{50} - %msg%n</pattern> </springProfile> </layout> </appender>
    

    只要运用logback.xml作为日志配置文件,还要选用profile功能,会有以下错误

    no applicable action for [springProfile]

    能够遵从slf4j的日记适配图,进行相关的切换;

    slf4j+log4j的方式;

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>logback-classic</artifactId> <groupId>ch.qos.logback</groupId> </exclusion> <exclusion> <artifactId>log4j-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions></dependency><dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId></dependency>
    

    切换为log4j2

     <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId></dependency>
    

    使用SpringBoot;

    1)、创造SpringBoot应用,选中大家需求的模块;

    2)、SpringBoot已经暗许将那一个意况布局好了,只需求在布置文件中钦点少许安顿就足以运转起来

    3)、本人编排工作代码;

    活动配置原理?

    其一现象SpringBoot帮我们配备了如何?能还是不可能修改?能改改哪些布署?能还是不能够扩展?xxx

    xxxxAutoConfiguration:帮我们给容器中自动配置组件;xxxxProperties:配置类来封装配置文件的内容;
    
    @ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)public class ResourceProperties implements ResourceLoaderAware { //可以设置和静态资源有关的参数,缓存时间等
    
     WebMvcAuotConfiguration: @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings { logger.debug("Default resource handling disabled"); return; } Integer cachePeriod = this.resourceProperties.getCachePeriod(); if (!registry.hasMappingForPattern("/webjars/**")) { customizeResourceHandlerRegistration( registry.addResourceHandler("/webjars/**") .addResourceLocations( "classpath:/META-INF/resources/webjars/") .setCachePeriod(cachePeriod)); } String staticPathPattern = this.mvcProperties.getStaticPathPattern(); //静态资源文件夹映射 if (!registry.hasMappingForPattern(staticPathPattern)) { customizeResourceHandlerRegistration( registry.addResourceHandler(staticPathPattern) .addResourceLocations( this.resourceProperties.getStaticLocations .setCachePeriod(cachePeriod)); } } //配置欢迎页映射 @Bean public WelcomePageHandlerMapping welcomePageHandlerMapping( ResourceProperties resourceProperties) { return new WelcomePageHandlerMapping(resourceProperties.getWelcomePage(), this.mvcProperties.getStaticPathPattern; } //配置喜欢的图标 @Configuration @ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true) public static class FaviconConfiguration { private final ResourceProperties resourceProperties; public FaviconConfiguration(ResourceProperties resourceProperties) { this.resourceProperties = resourceProperties; } @Bean public SimpleUrlHandlerMapping faviconHandlerMapping() { SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1); //所有 **/favicon.ico mapping.setUrlMap(Collections.singletonMap("**/favicon.ico", faviconRequestHandler; return mapping; } @Bean public ResourceHttpRequestHandler faviconRequestHandler() { ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler(); requestHandler .setLocations(this.resourceProperties.getFaviconLocations; return requestHandler; } }
    

    ==1)、所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;==

    ​ webjars:以jar包的办法引进静态财富;

    图片 15搜狗截图20180203181751.png

    localhost:8080/webjars/jquery/3.3.1/jquery.js

    <!--引入jquery-webjar-->在访问的时候只需要写webjars下面资源的名称即可 <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.3.1</version> </dependency>
    

    ==2)、"/**" 访谈当前项目标任何能源,都去找映射==

    "classpath:/META-INF/resources/", "classpath:/resources/","classpath:/static/", "classpath:/public/" "/":当前项目的根路径
    

    localhost:8080/abc === 去静态财富文件夹里面找abc

    ==3)、迎接页; 静态财富文件夹下的具备index.html页面;被"/**"映射;==

    ​ localhost:8080/ 找index页面

    ==4)、所有的 **/favicon.ico 都以在静态能源文件下找;==

    JSP、Velocity、Freemarker、Thymeleaf

    图片 16template-engine.png

    SpringBoot推荐的Thymeleaf;

    语法更简便易行,功用更有力;

    3.非详细的情况页、编辑页进入列表页时列表数据得刷新,页数、筛选标准等都整体重新设置

    这几个手艺,你能领会任何一项,都将是你今后面试时光辉的优势,因而假如你对某一项本领感兴趣的话。这一年可以深深去研究一下。

    B. 配置文件

    按上面的配备安装SMTP服务器、顾客密码、及收发人音信

    //smtp 服务器spring.mail.host=smtp.qq.com//smtp 端口spring.mail.port=25//发送用户名spring.mail.username=xxx//发送密码spring.mail.password=xxx//收发人spring.mail.from=xxx@qq.comspring.mail.to=xxx@qq.com//启用鉴权spring.mail.properties.mail.smtp.auth=true//不使用tlsspring.mail.properties.mail.smtp.starttls.enable=falsespring.mail.properties.mail.smtp.starttls.required=false
    

    2、Thymeleaf使用

    @ConfigurationProperties(prefix = "spring.thymeleaf")public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = Charset.forName; private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html"); public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html"; //
    

    例如大家把HTML页面放在classpath:/templates/,thymeleaf就会半自动渲染;

    使用:

    1、导入thymeleaf的称谓空间

    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    

    2、使用thymeleaf语法;

    <!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <h1>成功!</h1> <!--th:text 将div里面的文本内容设置为 --> <div th:text="${hello}">这是显示欢迎信息</div></body></html>
    

    加Java架构师进级交流群获取Java工程化、高质量及布满式、高品质、深入显出。高架构。

    其三有的:对于列席工作2年到3年的校友有的同学在这一年以为本人早就很牛逼了,于是忍不住开首稳步麻痹。

    图片 17image

    2、STS使用 Spring Starter Project急忙创立项目

    SpringBoot使用壹个大局的安插文件,配置文件名是一定的;

    •application.properties

    •application.yml

    配置文件的功能:修改SpringBoot自动配置的暗中同意值;SpringBoot在头部都给咱们机关配置好;

    YAML(YAML Ain't Markup Language)

    ​ YAML A 马克up Language:是贰个标识语言

    ​ YAML isn't 马克up Language:不是一个符号语言;

    标志语言:

    ​ 以前的安插文件;多数都利用的是 xxxx.xml文件;

    ​ YAML:以多少为主导,比json、xml等更合乎做布置文件;

    ​ YAML:配置例子

    server: port: 8081
    

    ​ XML:

    <server> <port>8081</port></server>
    

    3.在对象列表页的beforeRouteEnter方法中剖断页面步向方式(详细情形页,编辑页或别的办法),根据必要将路由参数的ifDoFresh字段设为true/false,

    当你做到开辟框架的就学今后,你就该找工作了,在校的找实习,结业的找全职。与此同期,在找专门的学问的还要,你不该甘休你的读书,正确的说,是您在随后都不可能停下学习。上边那几个内容你只是百分百吞枣的学会了利用,你能够逐步品尝着去询问更加多的东西,网络是您最重大的民间兴办教授。

    IMAP的齐全都以 Internet Mail Access Protocol,即交互式邮件访谈左券,是一种协助同步接收的协商。该合同由印度孟买理工州立大学在一九八两年研究开发,近年来是最风靡的邮件抽出作用公约。开启IMAP作用之后,电子邮件客商端可同台接收服务端的邮件,无论在客商端如故服务端上的操作都会报告到另一方,比方删除、标志等;其它IMAP还扶助只对中选的局地邮件举行收纳,那在POP左券上是做不到的。

    2)、整合SpringData JPA

    JPA:ORM(Object Relational Mapping);

    1)、编写二个实体类和数据表进行映射,何况配备好映射关系;

    //使用JPA注解配置映射关系@Entity //告诉JPA这是一个实体类@Table(name = "tbl_user") //@Table来指定和哪个数据表对应;如果省略默认表名就是user;public class User { @Id //这是一个主键 @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键 private Integer id; @Column(name = "last_name",length = 50) //这是和数据表对应的一个列 private String lastName; @Column //省略默认列名就是属性名 private String email;
    

    2)、编写八个Dao接口来操作实体类对应的数据表(Repository)

    //继承JpaRepository来完成对数据库的操作public interface UserRepository extends JpaRepository<User,Integer> {}
    

    3)、基本的配置JpaProperties

    spring: jpa: hibernate:# 更新或者创建数据表结构 ddl-auto: update# 控制台显示SQL show-sql: true
    

    多少个第一的事件回调机制

    配置在META-INF/spring.factories

    ApplicationContextInitializer

    SpringApplicationRunListener

    只须要放在ioc容器中

    玩转vue前进刷新,idea热更新应用方案。ApplicationRunner

    CommandLineRunner

    起步流程:

    initialize;private void initialize(Object[] sources) { //保存主配置类 if (sources != null && sources.length > 0) { this.sources.addAll(Arrays.asList; } //判断当前是否一个web应用 this.webEnvironment = deduceWebEnvironment(); //从类路径下找到META-INF/spring.factories配置的所有ApplicationContextInitializer;然后保存起来 setInitializers((Collection) getSpringFactoriesInstances( ApplicationContextInitializer.class)); //从类路径下找到ETA-INF/spring.factories配置的所有ApplicationListener setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class)); //从多个配置类中找到有main方法的主配置类 this.mainApplicationClass = deduceMainApplicationClass();}
    

    图片 18搜狗截图20180306145727.png图片 19搜狗截图20180306145855.png

    public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; FailureAnalyzers analyzers = null; configureHeadlessProperty(); //获取SpringApplicationRunListeners;从类路径下META-INF/spring.factories SpringApplicationRunListeners listeners = getRunListeners; //回调所有的获取SpringApplicationRunListener.starting()方法 listeners.starting(); try { //封装命令行参数 ApplicationArguments applicationArguments = new DefaultApplicationArguments; //准备环境 ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments); //创建环境完成后回调SpringApplicationRunListener.environmentPrepared();表示环境准备完成 Banner printedBanner = printBanner(environment); //创建ApplicationContext;决定创建web的ioc还是普通的ioc context = createApplicationContext(); analyzers = new FailureAnalyzers; //准备上下文环境;将environment保存到ioc中;而且applyInitializers(); //applyInitializers():回调之前保存的所有的ApplicationContextInitializer的initialize方法 //回调所有的SpringApplicationRunListener的contextPrepared(); // prepareContext(context, environment, listeners, applicationArguments, printedBanner); //prepareContext运行完成以后回调所有的SpringApplicationRunListener的contextLoaded(); //s刷新容器;ioc容器初始化(如果是web应用还会创建嵌入式的Tomcat);Spring注解版 //扫描,创建,加载所有组件的地方;(配置类,组件,自动配置) refreshContext; //从ioc容器中获取所有的ApplicationRunner和CommandLineRunner进行回调 //ApplicationRunner先回调,CommandLineRunner再回调 afterRefresh(context, applicationArguments); //所有的SpringApplicationRunListener回调finished方法 listeners.finished(context, null); stopWatch.stop(); if (this.logStartupInfo) { new StartupInfoLogger(this.mainApplicationClass) .logStarted(getApplicationLog(), stopWatch); } //整个SpringBoot应用启动完成以后返回启动的ioc容器; return context; } catch (Throwable ex) { handleRunFailure(context, listeners, analyzers, ex); throw new IllegalStateException; }}
    

    配置在META-INF/spring.factories

    ApplicationContextInitializer

    public class HelloApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.out.println("ApplicationContextInitializer...initialize..."+applicationContext); }}
    

    SpringApplicationRunListener

    public class HelloSpringApplicationRunListener implements SpringApplicationRunListener { //必须有的构造器 public HelloSpringApplicationRunListener(SpringApplication application, String[] args){ } @Override public void starting() { System.out.println("SpringApplicationRunListener...starting..."); } @Override public void environmentPrepared(ConfigurableEnvironment environment) { Object o = environment.getSystemProperties().get("os.name"); System.out.println("SpringApplicationRunListener...environmentPrepared.."+o); } @Override public void contextPrepared(ConfigurableApplicationContext context) { System.out.println("SpringApplicationRunListener...contextPrepared..."); } @Override public void contextLoaded(ConfigurableApplicationContext context) { System.out.println("SpringApplicationRunListener...contextLoaded..."); } @Override public void finished(ConfigurableApplicationContext context, Throwable exception) { System.out.println("SpringApplicationRunListener...finished..."); }}
    

    配置(META-INF/spring.factories)

    org.springframework.context.ApplicationContextInitializer=com.xubh.springboot.listener.HelloApplicationContextInitializerorg.springframework.boot.SpringApplicationRunListener=com.xubh.springboot.listener.HelloSpringApplicationRunListener
    

    只需求放在ioc容器中

    ApplicationRunner

    @Componentpublic class HelloApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("ApplicationRunner...run...."); }}
    

    CommandLineRunner

    @Componentpublic class HelloCommandLineRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("CommandLineRunner...run..."+ Arrays.asList; }}
    

    starter:

    ​ 1、这一个场景需求利用到的依据是哪些?

    ​ 2、怎样编写自动配置

    @Configuration //指定这个类是一个配置类@ConditionalOnXXX //在指定条件成立的情况下自动配置类生效@AutoConfigureAfter //指定自动配置类的顺序@Bean //给容器中添加组件@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置@EnableConfigurationProperties //让xxxProperties生效加入到容器中自动配置类要能加载将需要启动就加载的自动配置类,配置在META-INF/spring.factoriesorg.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,
    

    ​ 3、模式:

    运转器只用来做注重导入;

    极度来写二个电动配置模块;

    运维器信赖自动配置;外人只必要引进运转器

    mybatis-spring-boot-starter;自定义运转器名-spring-boot-starter

    步骤:

    1)、运营器模块

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xubh.starter</groupId> <artifactId>xubh-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> <!--启动器--> <dependencies> <!--引入自动配置模块--> <dependency> <groupId>com.xubh.starter</groupId> <artifactId>xubh-spring-boot-starter-autoconfigurer</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies></project>
    

    2)、自动配置模块

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xubh.starter</groupId> <artifactId>xubh-spring-boot-starter-autoconfigurer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>xubh-spring-boot-starter-autoconfigurer</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--引入spring-boot-starter;所有starter的基本配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies></project>
    
    package com.xubh.starter;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "xubh.hello")public class HelloProperties { private String prefix; private String suffix; public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getSuffix() { return suffix; } public void setSuffix(String suffix) { this.suffix = suffix; }}
    
    package com.xubh.starter;public class HelloService { HelloProperties helloProperties; public HelloProperties getHelloProperties() { return helloProperties; } public void setHelloProperties(HelloProperties helloProperties) { this.helloProperties = helloProperties; } public String sayHellTest(String name){ return helloProperties.getPrefix()+"-" +name + helloProperties.getSuffix(); }}
    
    package com.xubh.starter;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration@ConditionalOnWebApplication //web应用才生效@EnableConfigurationProperties(HelloProperties.class)public class HelloServiceAutoConfiguration { @Autowired HelloProperties helloProperties; @Bean public HelloService helloService(){ HelloService service = new HelloService(); service.setHelloProperties(helloProperties); return service; }}
    

    本文由澳门皇家赌场真人在线发布于皇家赌场游戏,转载请注明出处:玩转vue前进刷新,idea热更新应用方案

    关键词:

上一篇:没有了

下一篇:补习类别,Java工程师从0开头学框架结构