1. 手动管理
配置的bean,像controller、service,dao三层体系下编写的类,这些类都是我们在项目当中自己定义的类(自定义类)。当我们要声明这些bean,也非常简单,我们只需要在类上加上@Component以及它的这三个衍生注解(@Controller、@Service、@Repository),就可以来声明这个bean对象了。
但是在我们项目开发当中,还有一种情况就是这个类它不是我们自己编写的,而是我们引入的第三方依赖当中提供的。
第三方提供的类是只读的。无法在第三方类上添加@Component注解或衍生注解。
对于非项目内定义的第三方类,无法通过 @Component
等注解将其直接声明为 Bean
。需要使用 @Bean
注解来将这些第三方类引入 IOC 容器中。
如果需要定义第三方Bean时, 通常会单独定义一个配置类:
@Configuration //配置类 (在配置类当中对第三方bean进行集中的配置管理)
public class CommonConfig {
//声明第三方bean
@Bean //将当前方法的返回值对象交给IOC容器管理, 成为IOC容器bean
//通过@Bean注解的name/value属性指定bean名称, 如果未指定, 默认是方法名
public SAXReader reader(DeptService deptService){
System.out.println(deptService);
return new SAXReader();
}
}
在方法上加上一个@Bean注解,Spring 容器在启动的时候,它会自动的调用这个方法,并将方法的返回值声明为Spring容器当中的Bean对象。
注意事项 :
(1)通过@Bean注解的name或value属性可以声明bean的名称,如果不指定,默认bean的名称 就是方法名。
(2)如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根 据类型自动装配。
2. 自定义起步依赖
所谓starter指的就是SpringBoot当中的起步依赖。在SpringBoot当中已经给我们提供了很多的起 步依赖了,我们为什么还需要自定义 starter 起步依赖?这是因为在实际的项目开发当中,我们可能 会用到很多第三方的技术,并不是所有的第三方的技术官方都给我们提供了与SpringBoot整合的 starter起步依赖,但是这些技术又非常的通用。
SpringBoot官方starter命名: spring-boot-starter-xxxx
第三组织提供的starter命名: xxxx-spring-boot-starter
在自定义一个起步依赖starter的时候,按照规范需要定义两个模块:
1. starter模块(进行依赖管理[把程序开发所需要的依赖都定义在starter起步依赖中])
2. autoconfigure模块(自动配置)
将来在项目当中进行相关功能开发时,只需要引入一个起步依赖就可以了,因为它会将 autoconfigure自动配置的依赖给传递下来。
实现步骤:
第1步:创建自定义starter模块(进行依赖管理)
把所有的依赖统一管理起来
第2步:创建autoconfigure模块
在starter中引入autoconfigure (我们使用时只需要引入starter起步依赖即可)
第3步:在autoconfigure中完成自动配置
1. 定义一个自动配置类,在自动配置类中将所要配置的bean都提前配置好
2. 定义配置文件,把自动配置类的全类名定义在配置文件中
在后续项目使用中,只需引入这个起步依赖,会自动配置,管理所有的Bean,使用时直接注入即可。