1. 程式人生 > >@Configuration和@bean給容器中註冊組件

@Configuration和@bean給容器中註冊組件

his tag des 指定 gap cati vat val 容器

spring容器中註冊組件的兩種方式:

  • xml配置文件方式
  • 註解方式

1、xml配置文件方式

  • 編寫bean類
  • 使用xml文件配置bean註入到spring容器
  • 通過ClassPathXmlApplicationContext類獲取bean

1.1、編寫bean類

package com.jcon.entity;

/**
 * @author Jcon
 * @version V1.0
 * @Description: (用戶實體類)
 * @date 2019年01月28日
 */
public class Person {

    private String name;
    private Integer 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 +
                ‘}‘;
    }
}

1.2、使用xml文件配置bean註入到spring容器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="person" class="com.jcon.entity.Person">
        <property name="age" value="20"/>
        <property name="name" value="張三"/>
    </bean>

</beans>

1.3、通過ClassPathXmlApplicationContext類獲取bean

    // 傳統xml方式註入bean並從容器中獲取
    @Test
    public void xmlGetBean(){
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        Person person = (Person) applicationContext.getBean("person");
        System.out.println(person);
    }

技術分享圖片

2、註解方式

  • 編寫bean類
  • 編寫bean配置類,使用註解註入bean
  • 通過AnnotationConfigApplicationContext獲取bean對象

2.1、編寫bean類

package com.jcon.entity;

/**
 * @author Jcon
 * @version V1.0
 * @Description: (用戶實體類)
 * @date 2019年01月28日
 */
public class Person {

    private String name;
    private Integer 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 +
                ‘}‘;
    }
}

2.2、編寫bean配置類,使用註解註入bean

package com.jcon.entity;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Jcon
 * @version V1.0
 * @Description: (配置類)
 * @date 2019年01月28日
 */
@Configuration
public class Config {

    @Bean("person")
    public Person getPerson(){
        Person person = new Person();
        person.setAge(18);
        person.setName("李四");
        return person;
    }

}

2.3、通過AnnotationConfigApplicationContext獲取bean對象

    // 註解方式註入bean並從容器中獲取
    @Test
    public void annotationGetBean(){
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
        Person person = (Person) applicationContext.getBean("person"); // 對應bean名字為@bean方法的方法名,也可以使用@bean("name")指定bean名字
        System.out.println(person);
    }

技術分享圖片

總結

  • 使用註解類可以代替xml配置類
  • 註解方式bean名字默認是方法名,可以使用@bean("beanName")來指定bean名字

@Configuration和@bean給容器中註冊組件