Spring框架-@Resource
使用@Resource注解,实现组件装配,默认按照名称匹配。
下面的类都是使用到注解的类:
1 package dao.impl; 2 3 import org.springframework.stereotype.Repository; 4 5 import dao.UserDao; 6 import entity.User; 7 8 /** 9 * 用户DAO类,实现IDao接口,负责User类的持久化操作 10 */ 11 @Repository("userDao") 12 public class UserDaoImpl implements UserDao { 13 14 public void save(User user) { 15 // 这里并未实现完整的数据库操作,仅为说明问题 16 System.out.println("保存用户信息到数据库"); 17 //throw new RuntimeException("为了测试程序异常"); 18 } 19 }
1 package service.impl; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.stereotype.Service; 6 7 import service.UserService; 8 import dao.UserDao; 9 import entity.User; 10 11 /** 12 * 用户业务类,实现对User功能的业务管理 13 */ 14 @Service("userService") 15 public class UserServiceImpl implements UserService { 16 17 // 声明接口类型的引用,和具体实现类解耦合 18 @Resource(name="userDao")//通过resource注解进行装配 19 private UserDao dao; 20 21 22 public UserDao getDao() { 23 return dao; 24 } 25 26 27 public void setDao(UserDao dao) { 28 this.dao = dao; 29 } 30 31 32 public void addNewUser(User user) { 33 // 调用用户DAO的方法保存用户信息 34 dao.save(user); 35 System.out.println("注入进去的user对象的信息是:"+user.toString()); 36 } 37 }
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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- 扫描包中注解标注的类 -->
<context:component-scan base-package="service,dao" />
</beans>
测试方法:
1 package test; 2 3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 import service.UserService; 8 import service.impl.UserServiceImpl; 9 10 import entity.TestEntity; 11 import entity.User; 12 13 14 public class AopTest { 15 16 17
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService a = (UserService) ctx.getBean("userService");
User user=new User();
user.setUsername("丫丫");
a.addNewUser(user);
24 25 }
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:entity.User@15d0c81b
现在,将@Resource(name="userDao")的name属性去掉,@Resource
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:entity.User@15d0c81b
原因:resource属性默认是按照属性名称进行装配的,如果属性名称不对应的话,他会按照类型进行匹配的。
同样,这个属性也能够添加到setter方法上面
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:entity.User@15d0c81b
Resource注解默认的按照名称进行寻找指的是:public void setUserDao(UserDao dao) { 按照set后面的名称去寻找的
相应的我修改了:
1 package dao.impl; 2 3 import org.springframework.stereotype.Repository; 4 5 import dao.UserDao; 6 import entity.User; 7 8 /** 9 * 用户DAO类,实现IDao接口,负责User类的持久化操作 10 */ 11 @Repository("dao") 12 public class UserDaoImpl implements UserDao { 13 14 public void save(User user) { 15 // 这里并未实现完整的数据库操作,仅为说明问题 16 System.out.println("保存用户信息到数据库"); 17 //throw new RuntimeException("为了测试程序异常"); 18 } 19 }
1 package dao.impl; 2 3 import org.springframework.stereotype.Repository; 4 5 import dao.UserDao; 6 import entity.User; 7 8 /** 9 * 用户DAO类,实现IDao接口,负责User类的持久化操作 10 */ 11 @Repository("userDao") 12 public class UserDaoImpl2 implements UserDao { 13 14 public void save(User user) { 15 // 这里并未实现完整的数据库操作,仅为说明问题 16 System.out.println("保存用户信息到数据库111111111111"); 17 //throw new RuntimeException("为了测试程序异常"); 18 } 19 }
1 package service.impl; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.stereotype.Service; 6 7 import service.UserService; 8 import dao.UserDao; 9 import entity.User; 10 11 /** 12 * 用户业务类,实现对User功能的业务管理 13 */ 14 @Service("userService") 15 public class UserServiceImpl implements UserService { 16 17 // 声明接口类型的引用,和具体实现类解耦合 18 19 private UserDao dao; 20 21 22 public UserDao getDao() { 23 return dao; 24 } 25 26 @Resource//通过resource注解进行装配 27 public void setUserDao(UserDao dao) { 28 this.dao = dao; 29 } 30 31 32 33 public void addNewUser(User user) { 34 // 调用用户DAO的方法保存用户信息 35 dao.save(user); 36 System.out.println("注入进去的user对象的信息是:"+user.toString()); 37 } 38 }
运行测试方法:
package test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import service.UserService; import service.impl.UserServiceImpl; import entity.TestEntity; import entity.User; public class AopTest { @Test public void aopTest() { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService a = (UserService) ctx.getBean("userService"); User user=new User(); user.setUsername("丫丫"); a.addNewUser(user); } }
运行结果:
保存用户信息到数据库111111111111
注入进去的user对象的信息是:entity.User@7a36aefa