第二章 IoC Setter注入

     Setter注入又称为属性注入。是通过属性的setXXX()方法来注入Bean的属性值或依赖对象。由于Setter注入具有可选择性和灵活性高的优点,因此Setter注入是实际应用中最常用的注入方式。


ref的方式


a、使用2.2的例子中的UserDaoUserDaoImpl

[java]  view plain copy print ?
  1. public interface UserDao {  
  2.     public void save();  
  3. }  

[java]  view plain copy print ?
  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 id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>
	
	<!-- property是UserServiceImpl中的属性设置,这些属性必须有setter方法。name是属性的名字,与类中的名字相同。ref是引用,引用的是上面配置好的UserDaoImpl的name -->
	<bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
		<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 id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
		<property name="userDao">
			<bean class="cn.framelife.spring.dao.impl.UserDaoImpl"></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 id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
		<property name="userDao">
			<bean class="cn.framelife.spring.dao.impl.UserDaoImpl"></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>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值