zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HVR数据复制软件部署之(一)--HUB端部署
    LeetCode 169:Majority Element
    [LeetCode][Java] Trapping Rain Water
    跨平台C、C++代码注意的事项
    Delphi通过查找字符定位TADOQuery数据的位置
    ADOquery属性中cursortype,LockType属性
    delphi ADOQuery 开启本地缓存
    如何判断一个事务是否已开始?
    SQL Server 取日期时间部分
    delphi中怎么获取服务器的时间
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/12122796.html
Copyright © 2011-2022 走看看