Spring中的注解学习(一)

配置类等于配置文件

@Configuration  :  告诉spring这是一个配置类

@Bean : 从容器注册一个Bean,类型为返回值类型,id默认方法名作为id

例如:

@Bean ("person")//指定Bean的名字为person

public Person person01(){

return new Person("lisi",20)

}

通过new AnnotationConfigApplicationContent(MainConfig.class);来获取IOC容器,基于配置文件时是用new ClassPathXmlApplicationContext("配置文件的位置")来获取IOC容器。

 

 

@ComponentScan : 包扫描器

@ComponentScan(value="com.it" ,excludeFilters = {@Filter (type = FilterType.ANNOTATION,classes={Controller.class})})

value : 指定要扫描的包,excludeFilters : 指定扫描的时候按照什么规则排除哪些组建;

@ComponentScan(value ="com.it",includeFilters = {@Filter(type = FilterType.ANNOTATION,classes={Controller.calss} , useDefaultFilters = false)})

inlcudeFilters : 指定扫描包的时候只扫描哪些组件,需要将useDefaultFilters = false.

@Scope : 配置Bean的作用域(prototype,singleton,request,session)

singleton单实例情况下IOC启动会调用方法创建对象放到IOC容器中,以后每次获取直接从容器中拿就可以。

prototype:多实例情况下IOC容器启动时不会创建对象,每次获取getBean()时调用方法创建对象。

@Lazy : (针对单实例)

           单实例: 默认情况下IOC容器创建的时候创建对象

           懒加载 :   容器创建的时候不创建bean,在第一次使用的时候也就是getBean()的时候会创建bean.

@Condition : 按照一定的条件进行判断,满足条件给容器注册bean;

例如 : 系统是Windows,给容器注册("billl"),系统是Linux给容器注册("linux")

@Condition(WindowsConditon.class)   @Conditon(Linux.class)

@Conditon也可以放在配置类上,对配置类中的组件统一配置。

 

 

给容器中注册组件的方法:

1.包扫描+组件标注注解(@Service   @Controller  @Repository  @Component)  这种情况局限于自己写的类,不适用从外部导入到包中的类(类上没有加注解)

2.@Bean(适用于导入的包)在配置类中直接用@Bean直接注册

3.@Import: 快速的给容器中导入一个组件

    (1)@Import({Color.class,Red.class}),容器会自动注册这个组件,id默认是类的全类名。

       (2) ImportSelector接口:返回需要导入的组件的数组@Import({Color.class,Red.class,MyImportSelector.class}),其中MyImportSelector.class会返回要注册到容器的全类名数组。

     (3)ImportBeanDefinitionRegistrar : 手动注册bean到容器中,在注入之前可以加入一些判断条件。

     (4)使用spring提供的FactoryBean(工厂bean)

//创建一个Spring定义的FactoryBean

public class ColorFactoryBean implements FactoryBean<color>{

//返回一个Color对象,这个对象会添加到容器中

@Override

public Color getObject() throws Exception{

        return new Color();

}

//设置bean是否是单实例

@Override

public boolean isSingleton(){

      return trure;

}

}

 

 

 

 

 

        例如:

             @Bean

            public ColorFactoryBean  colorFactoryBean(){

                    return new ColorFactoryBean();//实际上是获取的工厂里面配置的对象

}

              1)默认获取到的是工厂bean调用getObject创建的对象

               2)要获取工厂bean本身 ,我们需要给id前面加一个&      &ColorFactoryBean  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值