Spring框架[email protected]

使用@Resource注解,实现组件装配,默认按照名称匹配。

Spring框架[email protected]

Spring框架[email protected]

下面的类都是使用到注解的类:

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对象的信息是:

Spring框架[email protected]

原因:resource属性默认是按照属性名称进行装配的,如果属性名称不对应的话,他会按照类型进行匹配的。

同样,这个属性也能够添加到setter方法上面

Spring框架[email protected]

运行结果:

保存用户信息到数据库
注入进去的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对象的信息是: