一、组件注册
方式1:包扫描
@ComponentScan
扫描指定包,可以把扫描到标有@Controller、@Service、@Repository、@Component等注解的类的实例,加入容器
| 属性名 | 作用 |
|---|---|
| value | 指定要扫描的包 |
| excludeFilters | 添加过滤器,指明排除某种类型的bean加入到容器,详见FilterType |
| includeFilters | 添加过滤器,指明只要某种类型的bean加入到容器 通常需要关闭默认的过滤器 |
| useDefaultFilters | 是否开启默认的过滤器 |
方式2:配置类
@Configuration
创建一个配置类,本身也是一个@Component,可以使用包扫描加入容器。
在把配置类加入容器时,会将其中所有配置的bean也加入容器。
@Bean
标注在配置类的方法上,将方法的返回值作为bean加入容器 ,方法名作为bean的id,
| 属性名 | 作用 |
|---|---|
| value | 重新定义bean的id |
- 可以使用
@Scope注解来定义bean的作用域 - 可以使用
@Lazy注解来决定单例bean是否懒加载 - 可以使用
@Conditional注解来决定bean是否加载,详见Condition
@Import
标注在配置类上,可以快速的导入一个类的实例进入ioc容器中,无需像@Bean再去写一个方法把类的实例new出来作为返回值返回。
该注解的value属性可以为以下三种值组成的数组
- 欲注册bean的Class
- 实现ImportSelector接口的类的Class;实现其中方法,该方法返回需要导入ioc容器的类的全类名数组
- 实现ImportBeanDefinitionRegistrar接口的类的Class,实现其中方法来手动注册bean
FactoryBean
顾名思义是一个工厂bean,FactoryBean是一个接口,需要被实现,本身可以使用@Bean注解加入到ioc容器中。
使用id获取bean时,获得到的是FactoryBean中工厂方法创建的实例,而不是工厂本身
在id前加上&,才可以获取FactoryBean本身
@Profile
可以标注在bean或配置类上(类、 @bean、@Component),该注解本身是一个@Conditional
可以使用@Profile注解的value属性来表示bean在哪个环境下才被加入容器
可以使用-Dspring.profiles.active环境变量来设置当前环境,可以有多个值,默认为default环境