Spring框架[email protected]
使用@Resource注解,实现组件装配,默认按照名称匹配。
下面的类都是使用到注解的类:
package dao.impl; import org.springframework.stereotype.Repository; import dao.UserDao; import entity.User; /** * 用户DAO类,实现IDao接口,负责User类的持久化操作 */ @Repository("userDao") public class UserDaoImpl implements UserDao { public void save(User user) { // 这里并未实现完整的数据库操作,仅为说明问题 System.out.println("保存用户信息到数据库"); //throw new RuntimeException("为了测试程序异常"); } }
package service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import service.UserService; import dao.UserDao; import entity.User; /** * 用户业务类,实现对User功能的业务管理 */ @Service("userService") public class UserServiceImpl implements UserService { // 声明接口类型的引用,和具体实现类解耦合 @Resource(name="userDao")//通过resource注解进行装配 private UserDao dao; public UserDao getDao() { return dao; } public void setDao(UserDao dao) { this.dao = dao; } public void addNewUser(User user) { // 调用用户DAO的方法保存用户信息 dao.save(user); System.out.println("注入进去的user对象的信息是:"+user.toString()); } }
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>
测试方法:
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 { 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对象的信息是:
现在,将@Resource(name="userDao")的name属性去掉,@Resource
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:
原因:resource属性默认是按照属性名称进行装配的,如果属性名称不对应的话,他会按照类型进行匹配的。
同样,这个属性也能够添加到setter方法上面
运行结果:
保存用户信息到数据库
注入进去的user对象的信息是:
Resource注解默认的按照名称进行寻找指的是:public void setUserDao(UserDao dao) { 按照set后面的名称去寻找的
相应的我修改了:
package dao.impl; import org.springframework.stereotype.Repository; import dao.UserDao; import entity.User; /** * 用户DAO类,实现IDao接口,负责User类的持久化操作 */ @Repository("dao") public class UserDaoImpl implements UserDao { public void save(User user) { // 这里并未实现完整的数据库操作,仅为说明问题 System.out.println("保存用户信息到数据库"); //throw new RuntimeException("为了测试程序异常"); } }
package dao.impl; import org.springframework.stereotype.Repository; import dao.UserDao; import entity.User; /** * 用户DAO类,实现IDao接口,负责User类的持久化操作 */ @Repository("userDao") public class UserDaoImpl2 implements UserDao { public void save(User user) { // 这里并未实现完整的数据库操作,仅为说明问题 System.out.println("保存用户信息到数据库111111111111"); //throw new RuntimeException("为了测试程序异常"); } }
package service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import service.UserService; import dao.UserDao; import entity.User; /** * 用户业务类,实现对User功能的业务管理 */ @Service("userService") public class UserServiceImpl implements UserService { // 声明接口类型的引用,和具体实现类解耦合 private UserDao dao; public UserDao getDao() { return dao; } @Resource//通过resource注解进行装配 public void setUserDao(UserDao dao) { this.dao = dao; } public void addNewUser(User user) { // 调用用户DAO的方法保存用户信息 dao.save(user); System.out.println("注入进去的user对象的信息是:"+user.toString()); } }
运行测试方法:
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对象的信息是: