JavaConfig【精通】
@Configuration
public class UserConfig {
@Bean
public User user(){
return new User();
}
@Bean
public User user2(){
return new User();
}
}
SpringBoot的底层实现原理是什么?【精通】
通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.factories),这这些类中在基于spring4.0提供的Condition接口进行Bean的初始化。
如何定义Condition?【熟悉】
-
创建Condition接口实现类
public class ClassCondition implements Condition { // ConditionContext上下文 // AnnotatedTypeMetadata注解元数据 boolean matches(ConditionContext var1, AnnotatedTypeMetadata var2); }
-
使用注解使用自定条件
@Conditional(ClassCondition.class)
-
自定义注解(了解)
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Conditional(ClassCondition.class) public @interface ConditionOnClass { String[] value(); }
切换内置服务器[熟悉]
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--排除tomcat依赖-->
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!--引入jetty的依赖-->
<dependency>
<artifactId>spring-boot-starter-jetty</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
自定Enable注解功能【熟悉】
-
创建Enable注解
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface EnableUser { }
-
在注解上通过Import注解导入开发给其它模块使用的配置类
@Import(UserConfig.class)
-
在使用方通过@EnableUser 开启模块的功能
@EnableUser @SpringBootApplication public class SpringbootEnableApplication { }
Import的用法
★ 1. 导入Bean
★★ 2. 导入配置类 @Import(UserConfig.class)
3. 导入ImportSelector的实现类。
4. 导入ImportBeanDefinitionRegistrar实现类
如何自定义Stater?【熟练】
-
创建autoconfigure工程
-
定义我们模块所提供的功能配置类
- 注意通过条件判断,防止Bean冲突@ConditionalOnMissingBean(name = “jedis”)
-
编写META-INF/spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.itheima.redis.config.RedisAutoConfiguration
-
-
创建starter工程(遵循Spring starter命名规范)
- 导入autoconfigure
特殊注解【精通】
- @EnableConfigurationProperties(RedisProperties.class) 导入一个配置属性类
- 导入的类需要被@ConfigurationProperties属性标记
SpringBoot监听项目启动事件【熟练】
-
程序之后执行:
- ApplicationRunner:SpringBoott启动完成后被调用,参数是ApplicationArguments
- CommandLineRunner:SpringBoott启动完成后被调用,参数是String
-
程序启动过程中:
-
实现过程的事件监听器
public class SpringContextListenerTest implements ApplicationListener<ApplicationStartingEvent > { @Override public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) { System.out.println("我是菩萨,保佑你无BUG!!!"); } }
-
在spring启动类中添加监听器
public static void main(String[] args) { SpringApplication app = new SpringApplication(SpringbootListenerApplication.class); // app.addInitializers(new MyApplicationContextInitializer()); app.addListeners( new SpringContextListenerTest()); app.run(args); }
-
-
SpringApplicationRunListener:提供全生命周期的事件监听【了解】
-
ApplicationContextInitializer :监听Conetext开始创建的时候【了解】
SpringBoot集成监控Actuator【熟悉】
-
导包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
-
开放所有的监控功能
# 将所有的监控endpoint暴露出来 management.endpoints.web.exposure.include=*
-
可用接口
- /actuator/info,线是应用的基本信息
- /actuator/health,服务的运行状态检查
安装SpringBootAdmin【熟悉】
-
服务器安装
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency>
// 开启admin服务功能 @EnableAdminServer @SpringBootApplication public class SpringbootAdminServerApplication { public static void main(String[] args) { SpringApplication.run(SpringbootAdminServerApplication.class, args); } }
-
客户端
<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> </dependency>
# 指定adminserver的地址 spring.boot.admin.client.url=http://localhost:9000
SpringBoot如何打包War?【熟悉】
-
改造启动类
@SpringBootApplication public class SpringbootDeployApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SpringbootDeployApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(SpringbootDeployApplication.class); } }
-
改造POM.xml
<packaging >war< /packaging>
gs);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootDeployApplication.class);
}
}
- 改造POM.xml
< packaging>war< /packaging>