1. 程式人生 > >Spring 屬性依賴註入

Spring 屬性依賴註入

address 中國 rop tag 標簽 .org 構造方法 utf-8 imp

1.1 屬性依賴註入

依賴註入方式:手動裝配 和 自動裝配

手動裝配:一般進行配置信息都采用手動

基於xml裝配:構造方法、setter方法

基於註解裝配:

自動裝配:struts和spring 整合可以自動裝配

byType:按類型裝配

byName:按名稱裝配

constructor:構造裝配,

auto: 不確定裝配。

一.構造方法註入

User.java

public class User {
	
	private Integer uid;
	private String username;
	private Integer age;
	
	public User(Integer uid, String username) {
		super();
		this.uid = uid;
		this.username = username;
	}
	
	public User(String username, Integer age) {
		super();
		this.username = username;
		this.age = age;
	}
}

ApplicationContext.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 構造方法註入 
		* <constructor-arg> 用於配置構造方法一個參數argument
			name :參數的名稱
			value:設置普通數據
			ref:引用數據,一般是另一個bean id值
			
			index :參數的索引號,從0開始 。如果只有索引,匹配到了多個構造方法時,默認使用第一個。
			type :確定參數類型
		例如:使用名稱name
			<constructor-arg name="username" value="jack"></constructor-arg>
			<constructor-arg name="age" value="18"></constructor-arg>
		例如2:【類型type 和  索引 index】
			<constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>
			<constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>
	-->
	<bean id="userId" class="com.itheima.f_xml.a_constructor.User" >
		<constructor-arg index="0" type="java.lang.String" value="1"></constructor-arg>
		<constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg>
	</bean>
</beans>

 

二.property屬性註入

User.java

package com.zk.myspring;

public class User {
	private Integer uid;
	private String username;
	private Integer age;
	
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ", username=" + username + ", age=" + age
				+ "]";
	}
	public User(Integer uid, String username, Integer age) {
		super();
		this.uid = uid;
		this.username = username;
		this.age = age;
	}
	public User() {
		super();
	}

}

Test.java

package com.zk.myspring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
	public static void main(String[]args)
	{
		String path="/com/zk/myspring/ApplicationContext.xml";
		ApplicationContext ac=new ClassPathXmlApplicationContext(path);
		
		User user=(User) ac.getBean("UserId");
		System.out.println(user);
	}
}

ApplicationContext.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="UserId" class="com.zk.myspring.User">
<!-- 
setter方法註入:
普通數據:
<property name="" value="值">
等效
<property name="">
<value>
值
</value>
</property>
引用數據
<property name="" ref="另一個bean">
</property>
等效
<property name="">
<ref bean="" />
</property>
 -->

<property name="username" value="jack"></property>
<property name="uid" value="1"></property>
<property name="age" value="24"></property>
<!-- p命名空間,對setter方法註入進行簡化,替換<property name="屬性名">,而是在<bean 屬性名="普通值"> -->
</bean>
</beans>

 ApplicationContext的p命名空間

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="UserId" class="com.zk.myspring.User" p:uid="1" p:age="24" p:username="zk" p:company-ref="company1"></bean>
<bean id="company1" class="com.zk.myspring.Company" p:name="computer science" p:address="徐州市中國礦業大學計算機科學與技術學院">
</bean>
</beans>

  

三.集合屬性註入

CollData.java

package com.zk.myspringcoll;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class CollData {
	private String[] arrayData;
	private List<String> listData;
	private Set<String> setData;
	private Map<String,String> mapData;
	private Properties propersData;
	public String[] getArrayData() {
		return arrayData;
	}
	public void setArrayData(String[] arrayData) {
		this.arrayData = arrayData;
	}
	public List<String> getListData() {
		return listData;
	}
	public void setListData(List<String> listData) {
		this.listData = listData;
	}
	public Set<String> getSetData() {
		return setData;
	}
	public void setSetData(Set<String> setData) {
		this.setData = setData;
	}
	public Map<String, String> getMapData() {
		return mapData;
	}
	public void setMapData(Map<String, String> mapData) {
		this.mapData = mapData;
	}
	
	public Properties getPropersData() {
		return propersData;
	}
	public void setPropersData(Properties propersData) {
		this.propersData = propersData;
	}
	@Override
	public String toString() {
		return "CollData [arrayData=" + Arrays.toString(arrayData)
				+ ", \nlistData=" + listData + ", \nsetData=" + setData
				+ ", \nmapData=" + mapData + ", \nproperties=" + propersData + "]";
	}
	
	
}

Test.java

package com.zk.myspringcoll;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestColl {
	public static void main(String[]args)
	{
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		CollData colldata=(CollData) ac.getBean("CollData");
		
		System.out.println(colldata);
	}
}

ApplicationContext.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<!-- 
集合註入都是給<property>添加子標簽
數組:<array>
List:<List>
Set:<set>
Map:<map>
Properties:<props><prop key="">value</prop></props>

普通數據:<value>
引用數據:<ref>
 -->
<bean id="CollData" class="com.zk.myspringcoll.CollData">
<property name="arrayData">
<array>
<value>DS</value>
<value>DZD</value>
<value>屌絲</value>
<value>吊中吊</value>
</array>
</property>
<property name="listData">
<list>
<value>list1</value>
<value>list2</value>
<value>list3</value>
<value>list4</value>
<value>list5</value>
</list>
</property>
<property name="setData">
<set>
<value>set1</value>
<value>set2</value>
<value>set3</value>
<value>set4</value>
<value>set5</value>
</set>
</property>
<property name="mapData">
<map>
<entry key="1" value="value1"></entry>
<entry key="2" value="value2"></entry>
<entry key="3" value="value3"></entry>
<entry key="4" value="value4"></entry>
<entry key="5" value="value5"></entry>
<!--
<entry>  
<key><value>6</value></key>
<value>value6</value>
</entry>
-->
</map>
</property>

<property name="propersData">
<props>
<prop key="高富帥">嫐</prop>
<prop key="白富美">嬲</prop>
<prop key="屌絲">挊</prop>
</props>
</property>
</bean>
</beans>

四.自動裝配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-2.5.xsd">
    <!-- 自動裝配(用的不多):  
         byName按名稱自動匹配(即要裝配的bean中的屬性名稱和配置中的bean名稱相同就會自動裝配,如UserService類中的屬性和userDAO的bean名稱相同就自動裝配)  
         byType按類型自動匹配 (即要裝配的bean中的屬性類型和配置中的bean的類型相同就會自動裝配,如UserService類中的屬性類型和userDAO的bean類型相同就自動裝配)
    -->
    <bean id="user" class="com.zk.myspring.User" autowire="default">
    </bean>

</beans>

 

五.使用註解

<?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
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:annotation-config></context:annotation-config>
</beans>

  

六.掃描包名

<?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
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:component-scan base-package="com.bjsxt"></context:component-scan>
</beans>

  

Spring 屬性依賴註入