1. 程式人生 > >spring注入----反射模式

spring注入----反射模式

Spring框架也是剛剛接觸,什麼IOC控制反轉啊,不太清楚,就連一個配置檔案都搞的很是糊塗

先說說我遇到的問題吧。最近在看Spring+rabbitmq但是rabbit一個生成者總是配不好,看到網上各種生產者的配置,抄襲這家,看看那一篇文章,很是混亂。感覺要麼就是對方寫的過於深刻,要麼就是我不瞭解博主的心啊。

今天我們我們在程式中有通過配置檔案注入獲取到一個bean ,那麼如何獲取到一個bean。其實獲取到一個bean我們可以簡單的理解為我們建立物件不採用new的方式,而是通過getBean來初始化一個物件。如何通過getBean來初始化一個物件。我們首先建立一個實體類Person:

package com.wdg.domain;

public class Person {
	private String name;
	private int age;

	public Person() {
	}

	public Person(String name, int age) {
		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 + "]";
	}

}

建立了這樣的一個實體類之後,我們要不通過new的方式來建立一個物件,既然用到的Spring,那麼我們就要用到Spring這個框架。那麼該如何做。

1.我們建立一個spring-beans.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd">
	<bean id="person" class="com.wdg.domain.Person">
		<property name="name" value="張三" />
		<property name="age" value="18" />
	</bean>
</beans>

我們可以看到的是在這個配置檔案裡面我們添加了一個bean ,那麼我們在程式碼裡面就可以使用這個配置檔案來初始化一個物件

    public static void main(String[] args) {
    	ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-beans.xml");
    	Person person = (Person) ctx.getBean("person");
    	System.out.println(person);
	}
	

我們可以看到的是程式碼裡面並沒有new一個Person,而是通過getBean("person")來初始化一個bean。裡面的引數是我們在配置文檔案中bean的id

最後輸出的結果為:Person [name=張三, age=18]

2.可以看到的是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="person" class="com.wdg.domain.Person">
	</bean>
</beans>

執行上面的一串java程式碼,輸出:Person [name=null, age=0]

3.那麼我們如果僅僅只寫一個屬性,會賦值嗎:

<?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.wdg.domain.Person">
			<property name="name" value="李四" />
	</bean>
</beans>

輸出:Person [name=李四, age=0]

通過上面的三點我們可以知道的是我們在bean之間的屬性是通過類裡面的getter和setter來進行給屬性進行賦值,而不是利用類裡面的建構函式,這也就是說明我們可以寫屬性的時候,可以給任意幾個進行賦值。

上面是我們修改配置檔案知道了裡面的我們在程式碼裡面可以通過載入配置檔案用getBean這個方法來建立一個物件。並且裡面的屬性值是利用類裡面的set方法來給類的屬性進行賦值的。

今天我們的講解到這個地方就結束了,下一片文章我們將繼續學習Spring注入的一些知識。如果感覺好,就掃一下紅包吧

                                                                                

希望對你有所幫助