Spring中如何注冊bean和獲取bean


Spring中如何注冊bean和獲取bean

Spring5.x發布了,再次復習一下常用的注冊和獲取bean的方法。

1.基於xml配置注冊於獲取bean

2.半注解半xml方式

3.基於注解注冊與獲取bean

常用於獲取bean的類:

ClassPathXmlApplicationContext、

FileSystemXmlApplicationContext、

AnnotationConfigApplicationContext

1、基於xml配置

01、項目准備

建立一個Spring項目,在src/java目錄下創建pojo包,建立一個User類。

這里的構造方法、getter/setter方法,toString方法在xml配置中並不一定需要,但在基於注解的時候是必須的。

public class User {

    private String name;
    private Integer id;
    private Integer age;
    private String gender;

    public User(String name, Integer id, Integer age, String gender) {
        this.name = name;
        this.id = id;
        this.age = age;
        this.gender = gender;
    }

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public Integer getId() {
        return id;
    }
   
    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

02、創建xml配置文件

在resourses目錄下創建ApplicationContext.xml作為配置文件。

在其中注冊兩個bean,分別通過屬性和構造方法賦值。

<?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="user" class="com.pojo.User">
        <property name="name" value="Jim"/>
        <property name="age" value="19"/>
        <property name="id" value="1000000"/>
        <property name="gender" value="female"/>
    </bean>
    
    <bean id="user2" class="com.pojo.User">
        <constructor-arg index="0" value="Tom"/>
        <constructor-arg name="age" value="18"/>
        <constructor-arg type="java.lang.Integer" value="100000"/>
        <constructor-arg index="3" value="male"/>
    </bean>
</beans>

03、獲取bean

使用ClassPathXmlApplicationContext獲取bean.

	@Test
	public void test(){
        //使用ClassPathXmlApplicationContext加載xml,默認從classpath下加載
  		ApplicationContext context = new 			            ClassPathXmlApplicationContext("ApplicationContext.xml");
        User user = context.getBean(User.class);
        System.out.println("bean:"+ user);
    }

使用FileSystemXmlApplicationContext獲取bean.

	@Test
    public void test2(){
        //使用FileSystemXmlApplicationContext加載xml,可指定文件位置
        ApplicationContext context = new FileSystemXmlApplicationContext("classpath:ApplicationContext.xml");
        User user2 = context.getBean("user2",User.class);
        System.out.println("bean:"+ user2);
    }

2、半注解半xml

這種還是需要配置文件完成部分操作。

01、創建xml配置文件

在resourses下創建Annotation.xml作為配置文件。

兩個標簽分別代表開啟注解配置、掃描使用注解的包。

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

    <context:annotation-config/>
    <context:component-scan base-package="com.pojo"/>

</beans>

02、使用注解注冊bean

在User上加入@Component注解,代表加入IOC容器,使用 @Value注解給字段賦值,可以在set方法上,也可以在字段名上。

@Component注解默認id為類名小寫,也可以手動更改。

@Component
public class User {

    @Value("Nike")
    private String name;
    private Integer id;
    private Integer age;
    private String gender;
    
    @Value("19002")
    public void setId(Integer id) {
        this.id = id;
    }

    
}

03、獲取bean

此時還有配置文件,所以還是從文件中獲取.

 @Test
    public void test3(){
        //使用FileSystemXmlApplicationContext加載xml,可指定文件位置
        ApplicationContext context = new FileSystemXmlApplicationContext("classpath:Annotation.xml");
        User user = context.getBean("user",User.class);
        System.out.println("bean:"+ user);
    }

3、基於注解

從Spring4開始,這種基於注解的開發被廣泛使用。

01、配置類

建立com.config包,在包下建立AppConfig.java。

在pojo包下建立Actor.java。

使用@Configuration表明這是一個配置類,配置類具有xml文件具有的所有功能。

@ComponentScan注解可以掃描包。

@Bean注解代表這是一個bean,返回類型即bean類型。

@Import注解可以把其他類注入當前配置中。

@Configuration
@Import({com.pojo.Actor.class})
@ComponentScan(basePackages = "com.pojo")
public class AppConfig {

   	@Bean
    public User user2(){
        return new User("Sally",190002,29,"female");
    }
}
@Component
public class Actor {
    @Value("Dave")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Actor{" +
                "name='" + name + '\'' +
                '}';
    }
}

02、獲取bean

此時使用使用AnnotationConfigApplicationContext獲取配置類。

 @Test
    public void test4(){
        //使用AnnotationConfigApplicationContext獲取配置類
        //ApplicationContext context = new AnnotationConfigApplicationContext("com.config");
   
        ApplicationContext context = new AnnotationConfigApplicationContext(com.config.AppConfig.class);
        User user = context.getBean("user",User.class);
        System.out.println("bean:"+ user);

    }
    
    
    @Test
    public void test5(){
        //使用AnnotationConfigApplicationContext獲取配置類
      
        ApplicationContext context = new AnnotationConfigApplicationContext(com.config.AppConfig.class);

        Actor actor=context.getBean("actor", Actor.class);
        System.out.println(actor);

    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM