一 . 概述
在之前我們使用spring的時候,大多數的時候都是通過xml進行bean的配置.
在spring3.0之后,出現了編程式的配置,在后面的springboot之中被大量的采用,
本節,我們學習給容器之中添加Bean.
二 .@Configuration 注解
本注解的作用主要有兩個:
我們首先看它的定義:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Configuration { String value() default ""; }
我們從上面的定義中可以看到,這個注解實際上就是一個@Component.因此,這個被注解標記的類會被加入到spring容器之中.
在這個被該注解標記的類之中,我們可以添加給中Bean,我們稱這中類為配置類.
我們可以認為這樣的類就是一個spring的配置文件.
三 .@Bean
我們首先看一下這個注解的定義:
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Bean { @AliasFor("name") String[] value() default {}; @AliasFor("value") String[] name() default {}; Autowire autowire() default Autowire.NO; String initMethod() default ""; String destroyMethod() default AbstractBeanDefinition.INFER_METHOD; }
我們發現這個注解可以標記在方法和注解上面,我們主要標記在方法上.
被標記的方法的返回值會被加入到springIOC容器之中.
我們看注解的屬性,我們就可以為這個bean指定名字,指定初始化和銷毀的方法.
四 .實例演示
我們首先創建一個類,如下.
public class Person { private String name; private Integer age;
我們聲明一個配置類,並加入這個類的實例到IOC容器之中.
@Configuration public class PersonConfig { @Bean public Person person() { Person person = new Person(); person.setName("trek"); person.setAge(22); return person; } }
我們現在做測試,具體如下:
@ContextConfiguration(classes= {PersonConfig.class}) @RunWith(SpringJUnit4ClassRunner.class) public class PersonTest { @Resource private ApplicationContext context ; @Test public void test() { System.out.println(context.getBean("person")); } }
通過上面的測試例子,我們可以知道,默認的bean的名字就是方法的名字.