xml配置spring IOC的细节和bean标签的一些属性

上一篇文章中,简单实现和介绍了ssh开发环境的搭建和spring IOC(控制反转)的xml方式配置实现,这里要根据bean标签的一些属性来写一下spring IOC的一些细节


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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
	<bean id="mydao"
		class="net.xinqushi.dao.impl.UserDAOMySqlImpl" >
	</bean>
	<bean id="service" class="net.xinqushi.service.impl.UserServiceImpl"
		>
		<property name="dao" ref="mydao"></property>
	</bean>
</beans>


我们看到spring ioc主要作用是:自动创建对象实例初始化属性,而且还可以组织装配对象。下面bean标签中的属性可以让装配、注入、加载的功能更强大。



1.自动装配  autowire

不同于上面在配置文件中,为action装配service,为service装配dao。这里可以自动进行装配。最常用的有两种方式:

(1)byName

  顾名思义,这里是找和名字一样的对象类进行自动装配。这里以service中的dao变量为例(这里详见上一篇博客文章http://blog.csdn.net/zlj1217/article/details/59015498)。

要根据在service中定义变量的名字在配置文件中找到id值相同的bean标签进行实例化。  这里就不用在service的bean标签之下配置property标签,因为service需要的是为名字为dao的变量初始化对象,会自动找在配置文件中 id为dao的配置生成类对象。


<?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="dao"
		class="net.xinqushi.dao.impl.UserDAOMySqlImpl" >
	</bean>
	<bean id="service" class="net.xinqushi.service.impl.UserServiceImpl"
		autowire="byName">
	</bean>
</beans>


(2)byType

根据相同类型自动装配,这里的type 是在service中找到与定义dao一样,类型是UserDAO的类。这里UserDAOFileImpl和UserDAOMySqlImpl 是实现了UserDAO接口,所以也是相同类。这里的名字和dao不相同也是可以的


<?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="dao"
		class="net.xinqushi.dao.impl.UserDAOMySqlImpl" >
	</bean>
	<bean id="service" class="net.xinqushi.service.impl.UserServiceImpl"
		autowire="byType">
	</bean>
</beans>

但是这样当有两个同样Type的配置时,会产生冲突。所以一般是使用ByName方式进行自动装配。


(3)可以在beans标签中设置default-autowise 为byName的方式


2.注入方式:

有两种注入属性的方式

(1)setter方式注入 对应着配置文件中  对应设置 property  标签(这里是手动装配)

  setter方式注入:例如注入service中的dao。就要在实现UserService接口的类中定义dao 生成其setter

  其中设置byName自动装配 只适合setter这种方式注入


(2)构造方法注入  对应设置 construction-arg标签

  构造方法注入:这时不需要setter和getter  ,而是生成参数是dao的 构造函数

  在配置文件applicationContext.xml中配置这个构造方法注入  标签为constrauctor-arg  属性为 name 和 ref


示例:构造器注入

package net.xinqushi.service.impl;

import net.xinqushi.dao.UserDAO;
import net.xinqushi.model.User;
import net.xinqushi.service.UserService;

public class UserServiceImpl implements UserService {

	private UserDAO dao;//在spring的配置中初始化dao层的实现
	
	//通过setter方式注入dao
//	public UserDAO getDao() {
//		return dao;
//	}
//	public void setDao(UserDAO dao) {
//		this.dao = dao;
//	}
	
	//通过构造器方式注入dao
	public UserServiceImpl(UserDAO dao) {
		super();
		this.dao = dao;
	}
	
	
	@Override
	public void add(User user) {
		// TODO Auto-generated method stub
		dao.addUser(user);
	}


}

对应着的配置文件:

<?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="mydao"
		class="net.xinqushi.dao.impl.UserDAOMySqlImpl" >
	</bean>
	<bean id="service" class="net.xinqushi.service.impl.UserServiceImpl"
		>
		<constructor-arg name="dao" ref="mydao"></constructor-arg>
	</bean>
</beans>

3.不同属性的输入方式,只做了解  就是不只是能在配置文件中注入对象

简单属性注入:int,String,float
集合属性注入:Map,List,Set


4.scope属性的4.单实例和多实例

在bean标签的属性中有scope属性,可取值有singleton(单例),prototype(原型,模板),request,session,global session    默认是singleton。


单实例对象的意思就是:在使用该类实例时,都是同一个实例。比如像对数据进行操作的类DAO中没有定义成员属性,只是定义了一些对数据操作的方法,这样就可以设置为单实例类。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值