Spring2.5依赖注入方式(DI)

Spring2.5依赖注入的方式有三种:

  1. 通过setter方法注入;
  2. 通过构造方法注入;
  3. 通过注解进行注入;

第一种方式:通过setter方法注入

Java代码 复制代码  收藏代码
  1. package com.test;   
  2.   
  3. public class UserServiceImplement implements IUserService   
  4.   
  5. {   
  6.     private IUserDao user;   
  7.   
  8.     public IUserDao getUser() {   
  9.         return user;   
  10.     }   
  11.   
  12.     public void setUser(IUserDao user) {   
  13.         this.user = user;   
  14.     }   
  15.   
  16.     public void saveUser() {   
  17.         user.addUser();   
  18.     }   
  19. }  
package com.test;

public class UserServiceImplement implements IUserService

{
	private IUserDao user;

	public IUserDao getUser() {
		return user;
	}

	public void setUser(IUserDao user) {
		this.user = user;
	}

	public void saveUser() {
		user.addUser();
	}
}

 

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">  
  5.     <bean id="userdao" class="com.test.UserDaoImplement"></bean>  
  6.     <bean id="userservice" class="com.test.UserServiceImplement">  
  7.         <property name="user" ref="userdao"></property>  
  8.     </bean>  
  9. </beans>  

 

 注意这种方法还可以把XML改成以下方式:

 

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">  
  5.     <bean id="userservice" class="com.test.UserServiceImplement"> <!-- <property name="user" ref="userdao"></property>-->  
  6.         <property name="user">  
  7.             <bean class="com.test.UserDaoImplement"></bean>  
  8.         </property>  
  9.     </bean>  
  10. </beans>  

 

这两者的区别在于,第二种方式只会注入到当前这个Bean实例中,而不能再注入到其它的Bean中,第一种方式被注入的Bean可以注入到多个Bean当中,这可能会有一些线程安全的问题,因此在最好指定被注入的Bean的作用域。

 

另外通过setter方式注入,对应的注入依赖属性,必须要有setter方法。

 

 

 

测试代码:

Java代码 复制代码  收藏代码
  1. package com.test;   
  2.   
  3. import org.springframework.context.ApplicationContext;   
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  5.   
  6. public class Test {   
  7.     public static void main(String[] args) {   
  8.         ApplicationContext ctx = new ClassPathXmlApplicationContext(   
  9.                 "com/test/bean.xml");   
  10.         IUserService us = (IUserService) ctx.getBean("userservice");   
  11.         us.saveUser();   
  12.     }   
  13. }  
package com.test;

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

public class Test {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"com/test/bean.xml");
		IUserService us = (IUserService) ctx.getBean("userservice");
		us.saveUser();
	}
}

 

第二种方式:通过构造方法进行注入

Java代码 复制代码  收藏代码
  1. package com.test;   
  2.   
  3. public class UserServiceImplement implements IUserService {   
  4.     private IUserDao user;   
  5.     int age;   
  6.   
  7.     public UserServiceImplement(IUserDao user, int age) {   
  8.         this.user = user;   
  9.         this.age = age;   
  10.     }   
  11.   
  12.     public void saveUser() {   
  13.         user.addUser();   
  14.         System.out.println(this.age);   
  15.     }   
  16. }  
package com.test;

public class UserServiceImplement implements IUserService {
	private IUserDao user;
	int age;

	public UserServiceImplement(IUserDao user, int age) {
		this.user = user;
		this.age = age;
	}

	public void saveUser() {
		user.addUser();
		System.out.println(this.age);
	}
}

Xml代码 复制代码  收藏代码
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang"  
  3.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">  
  4.     <bean id="userdao" class="com.test.UserDaoImplement"></bean>  
  5.     <bean id="userservice" class="com.test.UserServiceImplement">  
  6.         <constructor-arg index="0" type="com.test.IUserDao"  
  7.             ref="userdao"></constructor-arg>  
  8.         <constructor-arg index="1" value="24"></constructor-arg>  
  9.     </bean>  
  10. </beans>  

 

 

 

 

注意

  • <construcotr-arg>标签中的index属性如果构造方法只有一个参数的时候可以不指定,它的下标从0开始,表示构造方法参数的索引,如果有构造方法有多个参数必须指定索引。除此之外还有一个type属性,这个属性用来指定被注入的参数的参数类型,一定要跟构造方法中的参数类型一致,如果是一个接口,那么也不允许传它的实现类,这是一个可选属性;
  • 如果构造函数的的参数类型是基本数据类型,那么就不用ref属性了,而用value属性设置它的值,而且这些数据类型会自动打包和解包;
  • 同样要注意bean的作用域问题。

 测试代码同上......

 

第三种方式:通过java注解进行注入

 

使用这种方式进行注入可以用两个标注:

  • @Resource
  • @Autowired

两者的区别:1. @Resource标注是由JDK提供的,而@Autowired标注是由Spring提供的,因而@Autowired标注会与Spring紧密耦合,所以推荐使用@Resource标注;

                  2. @Resource默认是按照名称来装配注入的,当找不到与名称匹配的bean才会按照类型来装配注入;

                  3. @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;

                  4. @Resource和@Autowired都可以用来标注字段或者setter方法。

 

I.使用@Resource标注进行注入

Java代码 复制代码  收藏代码
  1. package com.test;   
  2.   
  3. import javax.annotation.Resource;   
  4.   
  5. public class UserServiceImplement implements IUserService {   
  6.   
  7.     @Resource  
  8.     private IUserDao user;   
  9.   
  10.     private IUserDao user1;   
  11.   
  12.     public IUserDao getUser1() {   
  13.         return user1;   
  14.     }   
  15.   
  16.     @Resource  
  17.     public void setUser1(IUserDao user1) {   
  18.         this.user1 = user1;   
  19.     }   
  20.   
  21.     public void saveUser() {   
  22.         user.addUser();   
  23.         System.out.println("user注入成功");   
  24.         user1.addUser();   
  25.         System.out.println("user1注入成功");   
  26.     }   
  27. }  
package com.test;

import javax.annotation.Resource;

public class UserServiceImplement implements IUserService {

	@Resource
	private IUserDao user;

	private IUserDao user1;

	public IUserDao getUser1() {
		return user1;
	}

	@Resource
	public void setUser1(IUserDao user1) {
		this.user1 = user1;
	}

	public void saveUser() {
		user.addUser();
		System.out.println("user注入成功");
		user1.addUser();
		System.out.println("user1注入成功");
	}
}

 

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  6.            http://www.springframework.org/schema/context   
  7.            http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  8.     <context:annotation-config />  
  9.   
  10.     <bean id="user" class="com.test.UserDaoImplement"></bean>  
  11.     <bean id="user1" class="com.test.UserDaoImplement"></bean>  
  12.     <bean id="userservice" class="com.test.UserServiceImplement"></bean>  
  13. </beans>  

 

 测试类:

Java代码 复制代码  收藏代码
  1. package com.test;   
  2.   
  3. import org.springframework.context.ApplicationContext;   
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  5.   
  6. public class Test {   
  7.   
  8.     public static void main(String[] args) {   
  9.         ApplicationContext ctx = new ClassPathXmlApplicationContext(   
  10.                 "com/test/bean.xml");   
  11.         IUserService us = (IUserService) ctx.getBean("userservice");   
  12.         us.saveUser();   
  13.     }   
  14. }  
package com.test;

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

public class Test {

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"com/test/bean.xml");
		IUserService us = (IUserService) ctx.getBean("userservice");
		us.saveUser();
	}
}

 

II.使用@Autowired

 

Java代码 复制代码  收藏代码
  1. package com.test;   
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;   
  4.   
  5. public class UserServiceImplement implements IUserService {   
  6.   
  7.     @Autowired  
  8.     private IUserDao user;   
  9.   
  10.     public IUserDao getUser() {   
  11.         return user;   
  12.     }   
  13.   
  14.     public void setUser(IUserDao user) {   
  15.         this.user = user;   
  16.     }   
  17.   
  18.     public void saveUser() {   
  19.         user.addUser();   
  20.         System.out.println("user注入成功");   
  21.     }   
  22. }  
package com.test;

import org.springframework.beans.factory.annotation.Autowired;

public class UserServiceImplement implements IUserService {

	@Autowired
	private IUserDao user;

	public IUserDao getUser() {
		return user;
	}

	public void setUser(IUserDao user) {
		this.user = user;
	}

	public void saveUser() {
		user.addUser();
		System.out.println("user注入成功");
	}
}

 

Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  6.            http://www.springframework.org/schema/context   
  7.            http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
  8.     <context:annotation-config />  
  9.   
  10.     <bean id="user" class="com.test.UserDaoImplement"></bean>  
  11.     <bean id="userservice" class="com.test.UserServiceImplement"></bean>  
  12. </beans>  

 测试类:

Java代码 复制代码  收藏代码
  1. package com.test;   
  2.   
  3. import org.springframework.context.ApplicationContext;   
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;   
  5.   
  6. public class Test {   
  7.   
  8.     public static void main(String[] args) {   
  9.         ApplicationContext ctx = new ClassPathXmlApplicationContext(   
  10.                 "com/test/bean.xml");   
  11.         IUserService us = (IUserService) ctx.getBean("userservice");   
  12.         us.saveUser();   
  13.     }   
  14. }  
package com.test;

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

public class Test {

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"com/test/bean.xml");
		IUserService us = (IUserService) ctx.getBean("userservice");
		us.saveUser();
	}
}

 

 

thx: http://krcjwj.iteye.com/blog/400497
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值