配置类 MyAppConfig

    1. import com.test.springboot.service.HelloService;
    2. import org.springframework.context.annotation.*;
    3. /**
    4. * @Configuration:注解告诉springboot当前类是一个配置类,是来替代之前的spring配置文件。
    5. * 在配置文件中用<bean></bean>标签添加组件
    6. */
    7. @Configuration
    8. @ComponentScan(basePackages = {"com.test.springboot"})
    9. public class MyAppConfig {
    10. //将方法的返回值添加到容器中,容器中这个组件默认的ID是方法名
    11. @Bean("helloService")
    12. public HelloService helloService() {
    13. System.out.println("配置类@bean给容器中添加组件了");
    14. return new HelloService();
    15. }
    16. }

    HelloService

    1. public class HelloService {
    2. public void say(String name) {
    3. System.out.println("****helloservice***" + name);
    4. }
    5. }

    测试类

    1. import com.test.springboot.bean.Person;
    2. import com.test.springboot.service.HelloService;
    3. import config.MyAppConfig;
    4. import org.junit.Test;
    5. import org.junit.runner.RunWith;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.boot.test.context.SpringBootTest;
    8. import org.springframework.context.ApplicationContext;
    9. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    10. import org.springframework.test.context.junit4.SpringRunner;
    11. /**
    12. * springboot单元测试
    13. * 可以在测试期间很方便的类似编码一样进行自动注入等容器的功能
    14. */
    15. @RunWith(SpringRunner.class)
    16. @SpringBootTest
    17. public class SpringBoot02ConfigApplicationTests {
    18. @Autowired
    19. Person person;
    20. @Autowired
    21. ApplicationContext ioc;
    22. @Test
    23. public void testHelloService() {
    24. System.out.println("****************************************");
    25. ApplicationContext context = new AnnotationConfigApplicationContext(MyAppConfig.class);
    26. HelloService helloService = (HelloService) context.getBean("helloService");
    27. System.out.println(helloService);
    28. boolean flag = context.containsBean("helloService");
    29. System.out.println("bean是否存在:" + flag);
    30. helloService.say("小明");
    31. }
    32. }

    执行结果

    1. 2019-05-08 17:27:32.553 INFO 2588 --- [ main] c.t.s.SpringBoot02ConfigApplicationTests : No active profile set, falling back to default profiles: default
    2. 2019-05-08 17:27:34.786 INFO 2588 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
    3. 2019-05-08 17:27:35.123 INFO 2588 --- [ main] c.t.s.SpringBoot02ConfigApplicationTests : Started SpringBoot02ConfigApplicationTests in 3.134 seconds (JVM running for 4.183)
    4. ****************************************
    5. 配置类@bean给容器中添加组件了
    6. com.test.springboot.service.HelloService@6eaa21d8
    7. bean是否存在:true
    8. ****helloservice***小明
    9. 2019-05-08 17:27:35.741 INFO 2588 --- [ Thread-2] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
    10. Process finished with exit code 0

    注解描述:

    • @Configuration : 指明当前类是一个配置类来替代之前的Spring配置文件,Spring boot的配置类,相当于Spring的配置文件。

      • Spring,通过配置文件添加组件
      • Spring boot,通过配置类的方式添加组件
    • @ComponentScan :作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中

    • @Bean :将方法的返回值添加到容器中