有时我们需要额外像SpringBoot添加一些我们自定义的组件,所谓组件其实就是一个含有特定功能的对象,那么我们有两种方式可以实现:

1.使用配置文件和注解

我们可以使用@ImportResource完成该需求,假如我们现在定义一个额外的对象,我们希望将此对象放入到容器中:

package com.eastnotes.springboot.service;

public class HelloService {

}

然后呢,我们再创建一个bean.xml配置文件,将此对象配置成bean对象:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="helloService" class="com.eastnotes.springboot.service.HelloService"></bean>
</beans>

然后在测试类中判断该对象有没有被放到容器中:

@RunWith(SpringRunner.class)
@SpringBootTest
class SpringBoot02QuickStartApplicationTests {

    @Autowired
    ApplicationContext ioc;

    @Test
    public void testHelloService(){
        boolean b = ioc.containsBean("helloService");
        System.out.println(b);
    }
}

最后的输出结果是false,说明helloService这个bean对象并没有放入容器中,这是因为该配置文件根本就没有被读取,如果想加载这个配置文件,需要我们在主配置类上使用@ImportResource注解进行加载该配置文件。

@ImportResource(value = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBoot02QuickStartApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBoot02QuickStartApplication.class, args);
    }

}

然后再次运行测试文件就会发现,容器中已经有了这个bean对象。但是在以后的开发中,我们很少会用到这种方式像SpringBoot中添加组件,更多的是使用下面的方式:

2.使用配置类

在学习Spring的时候,我们可以使用配置类来替代xml文件,因此SpringBoot也是提倡我们使用配置类的方式向其中假如组件:

package com.eastnotes.springboot.config;

import com.eastnotes.springboot.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration  //该注解指明该类是一个配置类
public class MyAppConfig {

    //该注解作用形同beans.xml中的<bean></bean>标签,就是添加组件的意思
    //它将方法的返回值添加到容器中,容器中这个组件的id为方法名
    @Bean
    public HelloService helloService(){
        return new HelloService();
    }
}

此时再次运行配置文件,就会发现输出为true