Java:
1.8
javaMaven:
3
springSpringFramework版本以及各組件成員:
5.1.1.RELEASE
this
- spring-context
- spring-core
- spring-beans
byName
來自: W3CSchool中的概述code
這種模式由屬性名稱指定自動裝配。Spring 容器看做 beans,在 XML 配置文件中 beans 的 auto-wire 屬性設置爲 byName。而後,它嘗試將它的屬性與配置文件中定義爲相同名稱的 beans 進行匹配和鏈接。若是找到匹配項,它將注入這些 beans,不然,它將拋出異常。xml
byName
在設值注入的應用)其目的是省略XML中的一些配置, 以減小代碼量.對象
Bean - Bean.java
get
❗這個Bean只是因爲Spring配置所寫順口叫的, 並不符合嚴格意義上的JavaBean.it
package noioo; public class Bean { public void sayHelloWorld(){ System.out.println("Hello World"); } }
Bean的使用者, 它依賴這個Bean - BeanUser.java
io
package noioo; public class BeanUser { private Bean beanName; public Bean getBeanName() { return beanName; } public void setBeanName(Bean beanName) { this.beanName = beanName; } public void useSayHelloWorld(){ beanName.sayHelloWorld(); } }
Spring XML配置文件 - spring-beans.xml
class
<?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:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> <bean id="beanUser" class="noioo.BeanUser"> <!-- 待會咱們將省略下面這個property配置 --> <property name="beanName" ref="bean"/> </bean> <bean id="beanName" class="noioo.Bean"> </bean> </beans>
執行者 - Runner.java
package noioo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Runner { public static void main(String[] args){ ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml"); BeanUser beanUser = (BeanUser)context.getBean("beanUser"); beanUser.useSayHelloWorld(); } }
Hello World Process finished with exit code 0
byName
來省略其中的一些配置修改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" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> <!-- 去掉了property, 新增了屬性autowire="byName" --> <bean id="beanUser" class="noioo.BeanUser" autowire="byName"> </bean> <!-- 這裏的id值對應了BeanUser中的屬性名bean --> <bean id="beanName" class="noioo.Bean"> </bean> </beans>
也就是說, 在
BeanUser
這個類中的屬性private Bean beanName
將被取出, 用來匹配同名爲"beanName"
的Spring Bean.
運行結果同樣.
Hello World Process finished with exit code 0
雖然在這裏省略的代碼並非不少, 畢竟只有一個對象....
byType
這種模式由屬性類型指定自動裝配。Spring 容器看做 beans,在 XML 配置文件中 beans 的 autowire 屬性設置爲 byType。而後,若是它的 type 剛好與配置文件中 beans 名稱中的一個相匹配,它將嘗試匹配和鏈接它的屬性。若是找到匹配項,它將注入這些 beans,不然,它將拋出異常。
來自: W3CSchool中的概述
上面的Java代碼不用改, 僅僅修改配置文件便可.
Spring配置文件 - 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" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> <bean id="beanUser" class="noioo.BeanUser" autowire="byType"> <!-- 它將會以定義的屬性值的類型來匹配這裏的Bean名, 屬性值是Bean, 也就是將會匹配一個類型爲"Bean"的Spring Bean --> </bean> <!-- 由於是根據類型匹配的, 咱們甚至連給這個Bean起id都不用 --> <bean class="noioo.Bean"> </bean> </beans>
❗注意:
是按照
UserBean
中屬性的類型來匹配的.
Hello World Process finished with exit code 0