Spring框架-@Resource

Posted dongyaotou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Spring框架-@Resource的主要内容,如果未能解决你的问题,请参考以下文章

Spring框架-@Resource

Spring中的资源文件框架——Resource

整理:spring注解 @Autowired @Qualifier @Resource

spring mvc 注解@Controller @RequestMapping @Resource的详细例子

spring 国际化 js怎么设置

Spring/Spring学习 自动装配@Autowired 和 @Resource