一 . 概述
在之前我们使用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的名字就是方法的名字.