閱讀977 返回首頁    go 阿裏雲 go 技術社區[雲棲]


第二章 IoC Setter注入

     Setter注入又稱為屬性注入。是通過屬性的setXXX()方法來注入Bean的屬性值或依賴對象。由於Setter注入具有可選擇性和靈活性高的優點,因此Setter注入是實際應用中最常用的注入方式。


ref的方式


a、使用2.2的例子中的UserDaoUserDaoImpl

  1. public interface UserDao {  
  2.     public void save();  
  3. }  

  1. public class UserDaoImpl implements UserDao {  
  2.     public void save() {  
  3.         System.out.println("保存用戶...");  
  4.     }  
  5. }  

b、創建UserService接口及其實現類UserServiceImpl

public interface UserService {
	public void addUser();
}

public class UserServiceImpl implements UserService {
	/*
	 * 在service層使用dao層的接口對象
	 * 接口對象必須有其setter方法,以供運行期spring注入值
	 */
	private UserDao userDao;
	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void addUser() {
		userDao.save();
	}
}


c、將UserDaoImplUserServiceImpl交由Spring管理

<bean  ></bean>
	
	<!-- property是UserServiceImpl中的屬性設置,這些屬性必須有setter方法。name是屬性的名字,與類中的名字相同。ref是引用,引用的是上麵配置好的UserDaoImpl的name -->
	<bean  >
		<property name="userDao" ref="userDao"></property>
	</bean>


d、測試

ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
		UserService userService = (UserService) context.getBean("userService");
		userService.addUser();



注入內部Bean


注入內部Bean其實也是ref的方式基本一樣,隻是在配置的時候不大相同而已。UserDaoImpl不再需要作為單獨的Bean交由Spring管理,而是作為UserServiceImpl的一部分來進行配置。

配置:

<!-- property是UserServiceImpl中的屬性設置,這些屬性必須有setter方法。name是屬性的名字,與類中的名字相同。Bean是屬性對象所屬的類的完整類名 -->
	<bean  >
		<property name="userDao">
			<bean ></bean>	
		</property>
	</bean>




注入基本類型


如:UserService中有一個String類型的字符串username:

public class UserServiceImpl implements UserService {
	private UserDao userDao;
	private String username;
	
	public void setUsername(String username) {
		this.username = username;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void addUser() {
		System.out.println(username);
		userDao.save();
	}
}

配置:

<bean  >
		<property name="userDao">
			<bean ></bean>		
		</property>
		<property name="username" value="zhangsan"></property>
	</bean>



注入集合


aListSet

類中有一個集合屬性及其setter方法。

private Set<String> usernames;

public void setUsernames(Set<String usernames){
      this.usernames = usernames;
}


配置:


<property name="usernames">
			<list>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</list>
		</property>


或者:

<property name=" usernames">
			<set>
				<value>aaa</value>
				<value>bbb</value>
				<value>ccc</value>
			</set>
		</property>



bMap

類中的屬性:

        private Map<Integer, String> map;
	
	public void setMap(Map<Integer, String> map) {
		this.map = map;
	}

配置:

<property name="map">
			<map>
				<entry key="1">
					<value>aaa</value>
				</entry>
				<entry key="2">
					<value>bbb</value>
				</entry>
			</map>
		</property>



cProperties

         Properties類型其實可以看成是Map類型的一種。Properties的鍵和值都隻能是字符串。

類中的屬性:

        private Properties mails;
	
	public void setMails(Properties mails) {
		this.mails = mails;
	}

配置:

<property name="mails">
			<props>
				<prop key="mailOfZhang">zhangsan_2013@163.com</prop>
				<prop key="mailOfLi">Lixiaolong_abcxx@qq.com</prop>
			</props>
		</property>


最後更新:2017-04-03 18:52:12

  上一篇:go C++內存管理學習筆記(5)
  下一篇:go 大話數據結構之二:算法