Spring基础组件----@Configuration
引言
- 本篇博文,本着简易使用以及简易理解的目的,不针对源码进行分析。如果有不正确的地方,还麻烦各位多多指正以下。Bean的注册有6种方式,本文只讨论2种
1.Bean
1.1 Spring XML 创建Bean
-
在原始的操作中,我们会使用Spring XML的方式来配置。这样的使用,会使得在之后注册大量的bean,导致XML配置文件膨胀,不利于对象的操作。
这里先创建一个Person类:
/** * @Author: iamasd * @Description: * @Date: Created in 18:112019/12/6 */ public class Person { private String name; private Integer age; public Person(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
接下来是XML文件的配置:
<bean id="person" class="cn.sq.demo1.Person"> <constructor-arg index="0" value="iamasd"/> <constructor-arg index="1" value="18"/> </bean>
这样的是通过有参构造器,在向IOC容器注册Bean的时候,通过构造器对其属性值进行赋值操作。或者我们可以不通过对象的构造器,将Person中的构造器注释,直接在XML的文件中通过Bean标签中的property标签,对对象内的属性赋值。
<bean id="person" class="cn.sq.demo1.Person"> <property name="name" value="iamasd"/> <property name="age" value="18"/> </bean>
写一个测试用例
/** * @Author: iamasd * @Description: * @Date: Created in 18:512019/12/6 */ public class TestDemo1 { @Test public void run1(){ //AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class); ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml"); Person person = (Person)context.getBean("person"); System.out.println(person); } } 结果:Person{name='iamasd', age=18} 以上便是最基础的XML配置,使对象注入到IOC容器中。但是,随着要注册的对象增多,会导致XML文件的臃肿,不推荐使用。
1.2 @Configuration+@Bean
-
除了第一个方法,我们还可以通过@Configuration这个注解,来表明这是一个配置类, 这个类可以使用Spring IoC容器作为bean定义的来源。 @Bean 注解在该类的方法上,AnnotationConfigApplicationContext将配置类中标注了 @Bean的方法的返回值识别为Spring Bean,并注册到容器中,归入IoC容器管理。其定义意义上上等同于Spring XML文件中的标签。
以下是一个简单的实例:
/** * @Author: iamasd * @Description: * @Date: Created in 18:222019/12/6 */ @Configuration public class MainConfig { //注册一个bean,返回Person,bean的id默认读取的方法名 @Bean public Person person(){ return new Person("iamasd",20); } }
通过@Configuration和@Bean标签,会将该对象注入到IOC容器中。@Bean中的默认值取该方法名,即person,这相当于<bean id=“person”…>,可以通过@Bean(“xxx”)来自定义beanId值。
以下是测试用例:
/** * @Author: iamasd * @Description: * @Date: Created in 18:512019/12/6 */ public class TestDemo1 { @Test public void run1(){ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class); //ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application.xml"); Person person = (Person)context.getBean("person1"); System.out.println(person); } } 结果为:Person{name='iamasd', age=20}
2.总结
- 通过对以上两种注册Bean的方式做了一个简单的描述,通过@Configuration + @Bean的方式更加简便。