Spring的注解 配置组件

本文详细介绍了Spring Boot中@Configuration、@ComponentScan、@Scope、@Lazy、@Conditional和@Import等核心注解的用法,以及如何通过@Bean、组件扫描和FactoryBean进行Bean的注册和生命周期管理。
摘要由CSDN通过智能技术生成

注解名称说明
1.@Configuration把一个类作为一个loC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
2.@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的<context:component-scan>默认扫描(@Controller、@Service、@Repostory、@Component)
 3.@Scope用于指定scope作用域的(用在类上)
4.@Lazy表示延迟初始化(就是只有当我们调用bean的时候,这个bean才会被初始化)@Lazy只对单例bean起作用
5.@ConditionalSpring4开始提供,它的作用是按照一定的条件进行判断,满足条件给容器注册Bean。属性是实现了Conditional接口的类
6.@Import导入外部资源
7.给Ioc容器注册Bean的方式@Bean直接导入单个类
@ComponentScan 默认扫描(@Controller.@Service、@Repostory、@Component)
@Import快速给容器导入Bean的方式
FactoryBean把需要注册的对象封装为FactoryBean
8.bean生命周期控制 

@PostConstruct用于指定初始化方法(用在方法上)

@PreDestory用于指定销毁方法(用在方法上)

@DependsOn :定义Bean初始化及销毁时的顺序

1. @Configuration:

@Configuration
public class MyConfig {
    // getbean()取值顺序
    //默认是类名首字母小写
    //其次是取方法名
    //最后有限取Bean的注解的value
    //@Bean
    @Bean(name="person")
    public Person getPerson(){
        return new Person("胡子");
    }
}

public class MyConfigTest {
    @Test
    public void test(){
        ApplicationContext app = new nnotationConfigApplicationContext(MyConfig.class);
        Object bean1 = app.getBean("person");
        Object bean2 = app.getBean("person");

       System.out.println(bean1==bean2);//打印ture
       Object person = app.getBean(Person.class);

      System.out.println(person);
    }
}

2.@ComponentScan

默认扫描(@Controller、@Service、@Repostory、@Component)

@ComponentScan的重要属性:

value 代表扫描的包 value = "com.ws.project"代表扫描com.ws.project包下面所有的类

useDefaultFilters = true;默认是true 代表使用默认的策略 也就是扫描注解

useDefaultFilters = false代表使用别的策略

includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class)}},//代表扫描com.ws.project 下的Controller注解所在的类

includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = StudentService.class)} //代表扫描com.ws.project 下的StudentService类

//@ComponentScan.Filter(type = FilterType.CUSTOM)自己扩展策略
 

@Configuration
@ComponentScan(value="com.annotation.confiuration",
        includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Person.class)},
        useDefaultFilters = false)
public class ComponentScanConfig {
}
public class ComponentScanTest {
    @Test
    public void test(){
        ApplicationContext app = new AnnotationConfigApplicationContext(ComponentScanConfig.class);

        String[] beanDefinitionNames = app.getBeanDefinitionNames();
        System.out.println(Arrays.toString(beanDefinitionNames));

    }
}

3.@Scope

Scope的value属性:

  • prototype原型,多例
  • singleton单例
  • request主要应用于web模块同一次请求只创建一个实例
  • session主要应用于web模块,同一个session只创建一个对象

默认是单例

4.@Lazy

Lazy只对单例bean起作用

默认容器启动时不创建对象,调用对象功能的时候才创建对象

5..@Conditional

条件类是实现了Conditional接口的类

-ea -Dos.name=linux

6.@Import

直接导入单个的类

快速给容器导入bean的方式

实现ImportSeletor自定义规则实现

实现ImportBeanDefinitionRegistrar 获得BeanDefinitionRegistry 可以手动直接往IOc容器里面塞bean

FactoryBean把需要注册的对象封装为FactoryBean

FactoryBean负责给Bean注册到IOC的bean

BeanFactory从IOc容器获取Bean对象

@Configuration
@Import(value = {Person.class})
public class ImportConfigTest {

    //直接导入单个的类
    @Bean
    public Person getPerson(){
        return new Person("胡子");
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值