一、使用方法一:
1、首先定义两个要使用的类
public interface UserDao{
public void save(Object object);
}
public class UseraoImpl implements UserDao{
public void save(){
System.out.println("save user ....");
}
}
2、在bena.xml的配置文件中添加一个bean标签,例如以下
<beans ....... >
<bean id="u" class="com.zzf.dao.impl.UserDaoImpl"> </bean>
<bean id="u1" class="com.zzf.dao.impl.UserDaoImpl"> </bean>
</beans>
3、在需要使用u的类型的的类中添加注解,例如
public class UserService{
private UserDao userDao;
@Resource(name="u")
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void add(User user){
userDao.save(user);
}
/**
* 前提:
* 1、在bean.xml的配置文件中的UserDaoImpl对象 "u" 的类型是UserDao,也就是说UserDaoImpl是UserDao的子类
* 或者UserDaoImpl实现了UserDao接口
* 2、在Service类中必须声明UserDao的对象,就像本例子中的private UserDao userDao;并且提供set方法
* 3、在userDao的set方法上写上注解@Resource(name="u")//(name="u"):不是必须的,在spring的注解机制中
* Resource是按照类型进行匹配的,只有在bean.xml的配置文件中配置有两个相同类型且都满足时UserDao类型
* 的id属性,如上例u、u2,时才在注解后添加name="u".
*/
}
二、使用方法二
第二种使用时方法是在bean.xml配置文件中UserDaoImpl 的id 属性值u、u2也不手写让其自动扫描,配置方法是:
1、在配置方法中
<beans ....... >
<!-- 自动扫描不在手写,所以把没有用的u以及u2全部注释掉
<bean id="u" class="com.zzf.dao.impl.UserDaoImpl"> </bean>
<bean id="u1" class="com.zzf.dao.impl.UserDaoImpl"> </bean>
-->
<!-- 让容器帮我们自动扫面,当然要使其自动扫描就应该为容器制定一个扫描范围,如下面定义的com.zzf -->
<context:component-scan base-package="com.zzf" />
</beans>
2、配置文件中添加过自动扫描机制之后就应在提供id的类中添加注解@component(”beanName“) //beanName相当于上例中的u或者u2.
public interface UserDao{
public void save(Object object);
}
@component("userDao")//注意是写在类上面不是方法上面的哦!!!!!
public class UseraoImpl implements UserDao{
public void save(){
System.out.println("save user ....");
}
}
3、在UserService类中不变
public class UserService{
private UserDao userDao;
@Resource(name="userDao")
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void add(User user){
userDao.save(user);
}
/**
* 调用流程:
在执行UserService类中的add(user)方法时,因为使用到了@Resource的userDao,所以容器就会去扫描com.zzf包下的类。当扫描到类UseraoImpl时,发现他的"头"上有一个component("userDao"),而且名称(首先对比名称)、类型都和需要的一致,这时就会拿到这个userDao用户正要使用的类中。
*/
}
注意在spring2.5.6中等同于@component的注解的有:@Repository 、@service、@Controller