首頁 > 軟體

Spring註解@Configuration與@Bean註冊元件的使用詳解

2022-06-14 14:02:08

原始Spring開發

Person.java

準備Person.java類:

package com.jektong.spring;
public class Person {
	private String name;
	private int age;
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

pom.xml

在pom檔案匯入Spring基本依賴:

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.jektong</groupId>
	<artifactId>maven01</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>maven01</name>
	<description>maven01</description>
	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.12.RELEASE</version>
		</dependency> 
	</dependencies>
</project>

bean.xml

在沒有使用Spring註解開發之前,我們通常會通過一個xml組態檔(bean.xml)去將我們需要使用的物件通過Bean的方式去注入到Spring容器中。

下面就是將Person作為物件注入Spring容器中:

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
	<bean id="person" class="com.jektong.spring.Person">
		<property name="name" value="zs"></property>
		<property name="age" value="18"></property>
	</bean>
</beans>

PersonTest.java

使用一個PersonTest.java測試類測試:

package com.jektong.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PersonTest {
	public static void main(String[] args) {
        // 載入組態檔,此檔案放在類路徑下。
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        // 獲取bean.xml檔案中注入的Person物件,並輸出。
		Person bean = (Person) applicationContext.getBean("person");
		System.out.println(bean);		
	}
}

輸出結果如下:

註解Spring開發

捨棄上面的bean.xml檔案,通過註解的方式將xml檔案轉換成設定類,建立PersonConfig設定類:

package com.jektong.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.jektong.spring.Person;
@Configuration // 告訴spring這是設定類相當於組態檔bean.xml
public class PersonConfig {
    // 這是注入到spring容器的物件ID
    // 括號內指定唯一ID,不指定則是預設以方法名為唯一ID,相當於:<bean>標籤中的ID值。
	@Bean("person01") 
	public Person person() {
		return new Person("李四",21);
	}
}

測試使用AnnotationConfigApplicationContext類讀取註解:

package com.jektong.spring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.jektong.config.PersonConfig;
public class PersonTest {
	public static void main(String[] args) {	
		ApplicationContext ac = new AnnotationConfigApplicationContext(PersonConfig.class);
		Person bean = ac.getBean(Person.class);
		System.out.println(bean);
        // 檢視BEAN的id
		String[] beanDefinitionNames = ac.getBeanNamesForType(Person.class);
		for (int i = 0; i < beanDefinitionNames.length; i++) {
			System.out.println("beanid為:"+ beanDefinitionNames[i]);
		}
	}
}

輸出如下:

@Configuration與@Bean作用總結

@Configuration

相當於spring中的XML組態檔,將此XML檔案替代成設定類,宣告在類上。

@Bean

相當於XML檔案中所設定的各個Bean物件,現宣告在方法上,預設以方法名作為注入的Bean的id。

到此這篇關於Spring註解@Configuration與@Bean註冊元件的使用詳解的文章就介紹到這了,更多相關Spring @Configuration內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com