1、SpringApplication 类
作用:用于启动 Spring Boot 的程序,根据传入的类的声明的注解来决定不同的启动方式
示例代码:
1 package org.ranger;
2 import org.springframework.boot.SpringApplication;
3 import org.springframework.boot.autoconfigure.SpringBootApplication;
4 //使用 SpringBoot 自动配置程序
5 @SpringBootApplication
6 public class Application {
7 public static void main(String[] args) {
8 //执行当前类,根据@SpringBootApplication 的配置,启动 SpringBoot 程序
9 SpringApplication.run(Application.class, args);
10 }
11 }
2、@EnableAutoConfiguration 注解
注解的声明:
1 @SuppressWarnings("deprecation")
2 @Target(ElementType.TYPE)
3 @Retention(RetentionPolicy.RUNTIME)
4 @Documented @Inherited
5 @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class)
6 public @interface EnableAutoConfiguration {
7 String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
8 Class<?>[] exclude() default {};
9 String[] excludeName() default {};
10 }
作用:启动程序时,告诉 SpringApplication 启动对象使用 SpringBoot 的默认配置
只要在 SpringBoot 项目的入口配置了 @EnableAutoConfiguration,SpringBoot 框架启动时就会自动根据你导入的 jar 包来加载 spring-boot-autoconfigure-1.5.4.RELEASE-sources.jar 中的 xxxAutoConfiguration 配置类,使用其默认配置。
属性说明:
exclude 属性:使用 Class 格式的方式,排除默认自动启动中不需要的配置类
excludeName 属性:使用类的限制名的方式,排序默认自动启动中不需要的配置类
3、@SpringBootApplication 注解
注解说明:
1 @Target(ElementType.TYPE)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Documented
4 @Inherited
5 @SpringBootConfiguration
6 @EnableAutoConfiguration
7 @ComponentScan(excludeFilters = {
8 @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
9 @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
10 public @interface SpringBootApplication {
11 @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude")
12 Class<?>[] exclude() default {};
13 @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName")
14 String[] excludeName() default {};
15 @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
16 String[] scanBasePackages() default {};
17 @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
18 Class<?>[] scanBasePackageClasses() default {};
19 }
根据注解的声明可以得出:@SpringBootApplication 注解也是启动 Springboot 的默认配置。只是 在@EnableAutoConfiguration 注解的基础上增加了扫描包@ComponentScan 和 设置类为配置类 @SpringBootConfiguration 注解。实现了将给类设置为配置类、扫描指定范围的类创建对象到容器里面,并且自动加载Spring Boot默认配置。
属性说明:
① basePackages 属性 @SpringBootApplication 默认扫描的范围是使用该注解的当前的类的包以及子包,如果要指定其他 范围的包,可以是 basePackages 指定。
② basePackageClasses 属性 用于精确指定哪些类需要创建对象加载到 Spring 容器里面。
③ exclude 属性 通过 Class 的方式排除不扫描的类,就是该类不创建对象。
④ excludeName 属性 通过类的全限制名的方式,排除不扫描的类,指定的类不会在容器中创建对象。
4、@AutoConfigureBefore 注解
注解说明:
指定在 SpringBoot 框架自动配置的配置类执行完成之前,执行指定的自定义的配置类。 如果放在 Application 入口类,表示在所有自动配置的配置类还没有可以就先加载自定义的配置 类。
@AutoConfigureBefore 注解属性:
value:使用类的方式指定自动配置类
name:使用类的全限制名(字符串)类指定配置类
示例代码:
① 创建一个普通的类,没有任何注解
1 package cn.mgy.utils;
2 /**
3 * 创建一个没有扫描注入容器注解的类
4 * @author ranger
5 * */
6 public class TestUtils {
7 /**
8 * 返回测试信息
9 * @return
10 */
11 public String test(){
12 return "-测试注入对象成功-";
13 }
14 }
② 创建一个自定义配置类,注入普通的类的Spring容器
1 package cn.mgy.config;
2
3 import org.springframework.context.annotation.Bean;
4 import org.springframework.context.annotation.Configuration;
5
6 package cn.mgy.config;
7
8 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
9 import org.springframework.context.annotation.Bean;
10 import org.springframework.context.annotation.Configuration;
11
12 import cn.mgy.utils.TestUtils;
13
14 /**
15 * 创建一个自定义的配置类
16 * @author ranger
17 *
18 */
19 @Configuration
20 public class MyConfiguration {
21 /**
22 * 返回一个对象到容器
23 * @return
24 */
25 @Bean(name="testUtils")
26 //表示如果Spring容器有TestUtils的对象就不执行这个方法在创建一次了。
27 @ConditionalOnMissingBean(TestUtils.class)
28 public TestUtils getTestUtils(){
29 TestUtils testUtils=new TestUtils();
30 return testUtils;
31 }
32
33 }
③ 在入口类配置加入自定义配置类
package cn.mgy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import cn.mgy.config.MyConfiguration;
//使用SpringBoot自动配置程序
@SpringBootApplication
//在自动配置的配置类之前启动自定义的配置类
@AutoConfigureBefore(value=MyConfiguration.class)
public class Application {
public static void main(String[] args) {
//执行当前类,根据@SpringBootApplication的配置,启动SpringBoot程序
SpringApplication.run(Application.class, args);
}
}
④ 在 Controller 里面使用这个注入的对象
1 package cn.mgy.controller;
2
3 import org.springframework.beans.factory.annotation.Autowired;
4 import org.springframework.stereotype.Controller;
5 import org.springframework.web.bind.annotation.RequestMapping;
6 import org.springframework.web.bind.annotation.ResponseBody;
7
8 import cn.mgy.utils.TestUtils;
9
10 @Controller
11 public class HelloController {
12
13 @Autowired
14 private TestUtils testUtils;
15
16 @RequestMapping(value="/")
17 @ResponseBody
18 public String say(){
19 System.out.println(testUtils.test());
20 return testUtils.test();
21 }
22
23 }
⑤ 测试,成功
5、@AutoConfigureAfter注解
作用:指定在SpringBoot框架自动配置的配置类执行完成之后,然后执行指定的自定义的配置类。
6、@SpringBootTest注解
注解说明:用于使用JUnit测试SpringBoot程序,启动SpringBoot框架。测试SpringBoot一定要加上。
示例代码:
1 package cn.mgy.test;
2
3 import java.sql.SQLException;
4
5 import javax.sql.DataSource;
6
7 import org.junit.Test;
8 import org.junit.runner.RunWith;
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.boot.test.context.SpringBootTest;
11 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
12
13 @RunWith(SpringJUnit4ClassRunner.class)
14 //如果不加该注解,无法启动SpringBoot
15 @SpringBootTest
16 public class DataSourceTest {
17
18 @Autowired
19 private DataSource dataSource;
20
21 @Test
22 public void dataSource() {
23 try {
24 System.out.println(dataSource.getConnection());
25 } catch (SQLException e) {
26 // TODO Auto-generated catch block
27 e.printStackTrace();
28 }
29 }
30
31 }