Spring 注解编程基础组件——配置注解

配置注解组件

@Configuration 将一个类作为IOC容器,如果在类方法加上@Bean的注解,就会作为这个Spring容器的一个Bean。

示例代码
@Configuration
public class MyConfig {

    @Bean("yu")//优先取定义的bean name
    public Person person1(){//如无定义则去方法名
        return new Person("Yu",18);
    }
}

调用代码
public class MyTest {
    @Test
    public void test() {
        ApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class);
        Object bean = app.getBean("yu");
        System.out.println(bean);
    }
}

@ComponentScan 包扫描注解,在配置类上添加此注解,即可扫描指定路径下的所在包的所有配置类,相当于xml配置中的<context:component-scan>。默认只扫描@Controller,@Service,@Repository,@Component注解。

@Configuration
@ComponentScan(value = "com.gupaoedu.project")
public class MyConfig {
}

@Scope 用于指定作用域,作用于类上。

示例代码
@Configuration
public class MyConfig {
    //prototype 原型,多例
    //singleton 单例,默认值
    //request 主要应用于web模块,同一次请求只创建一个实例
    //session 主要应用于web模块,同一个session只创建一个实例
    @Scope("prototype")
    @Bean
    public Person person(){
        //IoC实例化对象的时候,并不是简单地调用我们定义的方法
        return new Person("Yu",18);
    }
}

@Lazy 表示延迟加载, 只对单例Bean起作用, 默认非延迟加载。

示例代码: 
@Configuration
public class MyConfig {
    //懒加载只针对单例Bean起作用
    //默认容器启动时不创建对象,调用对象的功能时才创建
    @Lazy
    @Bean
    public Person person(){
        System.out.println("将对象添加到IoC容器中");
        return new Person("Yu",18);
    }
}

@Conditional 从Spring4开始提供使用,根据给定的条件判断,满足条件才给IOC注册Bean。

示例代码
@Configuration
public class MyConfig {
    //WinCondition和LinuxCondition需要实现Condition接口
    @Conditional(WinCondition.class)
    @Bean
    public Person win(){
        System.out.println("将对象Win添加到IoC容器中");
        return new Person("Win",16);
    }

    @Conditional(LinuxCondition.class)
    @Bean
    public Person linux(){
        System.out.println("将对象Linux添加到IoC容器中");
        return new Person("Linux",17);
    }
}

@Import 导入外部资源

示例代码
@Configuration
@Import(value = {Cat.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public class MyConfig {
    @Bean
    public Company company(){
        return new Company();
    }
    //给IoC中注册Bean的方式
    //1、@Bean 直接导入单个类
    //2、@ComponentScan 包扫描默认是扫描(@Controller、@Service、@Repository、@Component)
    //3、@Import 快速给容器导入组件Bean
    //      a. @Import 直接传参导入
    //      b. ImportSelector 自定义导入规则
    //      c.ImportBeanDefinitionRegistrar ,使用BeanDefinitionRegistry可以手动注入到IoC容器中
    //4、FactoryBean 把需要注入的对象封装为FactoryBean
    //      a、FactoryBean 负责将Bean注入到容器的Bean
    //      b、BeanFactory 从IoC中获得Bean对象
    @Bean
    public Person person(){
        return new Person("Yu",18);
    }

    @Bean
    public MyFactoryBean monkey(){
        return new MyFactoryBean();
    }
}

总结,给IoC中注册Bean的方式
1. @Bean 直接导入单个类
2. @ComponentScan 包扫描默认是扫描(@Controller、@Service、 @Repository、@Component)
3. @Import 快速给容器导入组件Bean
a. @Import 直接传参导入
b. ImportSelector 自定义导入规则
c.ImportBeanDefinitionRegistrar ,使用BeanDefinitionRegistry可以手动注入到IoC容器中
4. FactoryBean 把需要注入的对象封装为FactoryBean
a. FactoryBean 负责将Bean注入到容器的Bean
b. BeanFactory 从IoC中获得Bean对象

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值