Spring中Bean是一个非常重要的概念,在SSM的流行年代,一般通过XML文件来配置Bean,随着SpringBoot框架的流行,注解(Annotation)的方式因为配置方便,简洁,自动化也逐渐深入人心。但是从功能上来说,两者的功能并没有太大的区别,本章主要是展示两者的创建的实例,以及常见的注解展示。

使用XML配置SpringBean的方式

  • 定义一个POJO对象如下

    1. public class Student {
    2. private String name;
    3. private Integer age;
    4. private List<String> lessonList;
    5. // 篇幅问题,请手动补上sette & getter & toString 方法
    6. }
  • 在resource是目录下定义 bean.xml 文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!-- 手动的注入Bean对象-->
  6. <bean id="student" class="com.zhoutao123.spring.annotation.bean.Student">
  7. <property name="name" value="燕归来兮"/>
  8. <property name="age" value="18"/>
  9. <property name="lessonList">
  10. <list>
  11. <value type="java.lang.String">语文</value>
  12. <value type="java.lang.String">数学</value>
  13. </list>
  14. </property>
  15. </bean>
  16. </beans>
  • 在类目录创建main方法
  1. public static void main(String[] args) {
  2. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
  3. Student bean = context.getBean(Student.class);
  4. System.out.println(bean);
  5. }
  • 执行结果
  1. Student{name='燕归来兮', age=18, lessonList=语文,数学}

使用Annotation 注解的方式实现

  • 定义配置文件 MainConfig

    1. @Configuration
    2. public class MainConfig {
    3. @Bean("测试Bean")
    4. public Student student() {
    5. Student student = new Student();
    6. student.setAge(18);
    7. student.setLessonList(Arrays.asList("数学", "英语"));
    8. student.setName("燕归来兮");
    9. return student;
    10. }
    11. }
  • 在类目录下创建 main 方法

    1. public static void main(String[] args) {
    2. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
    3. // 从IOC容器中获取到Bean实例对象
    4. Student bean = context.getBean(Student.class);
    5. System.out.println(bean);
    6. // 输出Bean的名称,,如果在@Bean注解中,指定的话,就是Bean的指定值,否则为定义Bean的方法名,
    7. System.out.println("BeanName = " + String.join(",", context.getBeanNamesForType(Student.class)));
    8. }
  • 执行结果

    1. Student{name='燕归来兮', age=18, lessonList=数学,英语}
    2. BeanName = 测试Bean