Spring @Resource注解

@Resource一般用在属性或者set方法上用于为对象参数赋值,规则是假如这个注解中指定名称,则只按注解中的mame属性对应值查找对象,然后进行值的注入。假如注解中没有指定名称,先按变量名进行查找,假如没找到,则按类型查找。
@Resource一般应用在属性或set方法上。假如Spring发现某个set方法上有此注解,则直接调用set方法为属性赋值

Spring @Resource注解_第1张图片

Spring @Resource注解_第2张图片

Spring @Resource注解_第3张图片

pom.xml


    4.0.0
    com.spring
    spring-ioc-resource
    0.0.1-SNAPSHOT
    
        
            org.springframework
            spring-context
            4.3.10.RELEASE
        
    

spring-configs.xml



              

package project.dao;

public interface CarDao {
    void insertCar(String car);
}

package project.dao.impl;

import org.springframework.stereotype.Repository;

import project.dao.CarDao;
/**
 * 数据持久层对象(封装jdbc操作的对象)
 */
@Repository
public class CarDaoImpl implements CarDao{
    public CarDaoImpl() {
        System.out.println("CarDaoImpl.CarDaoImpl()");
    }

    @Override
    public void insertCar(String car) {
        System.out.println("CarDaoImpl.insertCar()");
        System.out.println("insert car "+car);
    }

}

package project.service;

public interface CarService {
    void saveCar(String car);
}

package project.service.impl;


import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import project.dao.CarDao;
import project.service.CarService;

@Service
public class CarServiceImpl implements CarService {
    
    private CarDao carDao;
    

    

    @Resource
    public void setCarDao(CarDao carDao) {
        System.out.println("CarServiceImpl.setCarDao()");
        this.carDao = carDao;
    }




    @Override
    public void saveCar(String car) {
        System.out.println("CarServiceImpl.saveCar()");
        carDao.insertCar(car);
    }

}

package test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import project.service.CarService;

public class TestProject {
    private static ClassPathXmlApplicationContext ctx;
    public static void init(){
        ctx=new ClassPathXmlApplicationContext("spring-configs.xml");
    }
    public static void close(){
        ctx.close();
    }
    public static void main(String[] args) {
        init();
        CarService carService=ctx.getBean("carServiceImpl",CarService.class);
        carService.saveCar("bmw");
        close();
    }
}

运行结果

CarDaoImpl.CarDaoImpl()
CarServiceImpl.setCarDao()
CarServiceImpl.saveCar()
CarDaoImpl.insertCar()
insert car bmw

如果注解在属性上

package project.service.impl;


import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import project.dao.CarDao;
import project.service.CarService;

@Service
public class CarServiceImpl implements CarService {
    
    @Resource
    private CarDao carDao;
    
    public CarServiceImpl(CarDao carDao) {
        System.out.println("CarServiceImpl.CarServiceImpl(CarDao carDao)");
        this.carDao = carDao;
    }


    public void setCarDao(CarDao carDao) {
        System.out.println("CarServiceImpl.setCarDao()");
        this.carDao = carDao;
    }

    @Override
    public void saveCar(String car) {
        System.out.println("CarServiceImpl.saveCar()");
        carDao.insertCar(car);
    }

}

运行结果

CarDaoImpl.CarDaoImpl()
CarServiceImpl.CarServiceImpl(CarDao carDao)
CarServiceImpl.saveCar()
CarDaoImpl.insertCar()
insert car bmw

你可能感兴趣的:(Spring @Resource注解)