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

posted on   ~码铃薯~  阅读(326)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示