Spring IOC(控制反转)与DI(依赖注入)

定义

IOC(Inversion of Control),即控制反转:对象的创建控制权不再由程序来执行,而是交由给Spring容器处理。简单的说程序不需要进行new操作,对象直接由Spring容器自动创建。
DI(Dependency Injection),即依赖注入:Spring容器为程序运行时提供所需要的资源(对象)。
Bean对象:IOC容器中进行管理、创建的对象。

在这里插入图片描述

主要由@Component、@Service、@Controller、@Repository、@Autowired、@Qualifier、@Resource注解体现。

@Component是通用注解,其他三个注解是这个注解的衍生注解,并且具有了特定的功能。
@Controller层是spring-mvc的注解,用于标注控制层组件,并查看是否处理请求转发,重定向。
@Service层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。
@Repository注解在持久层中,标注 DAO 类,具有将数据库操作抛出的数据访问异常自动转换(封装)为spring的持久层异常的功能。

所有在与主程序同级目录或子包中标记的注解会被ComponentScan(组件扫描器)识别并在Spring容器中创建相应的java bean。bean的名字是类名的首字母小写(Admin->admin)。

@Autowired 体现了依赖注入的思想,从容器中获取对象,不再需要通过new创建对象,就可以自动根据容器中符合条件的bean进行创建(接口实现类)。默认按类型进行注入,
@Qualifier 一般配合Autowired进行使用,可以指定特定Bean类名。

@Resource是jdk提供的注解,而@Autowired、@Qualifer都是Spring提供的注解。@Resource也是通过Bean的类名来直接注入。

程序实例

Dao层:ArraysDao返回[1,2,3]集合

public interface BasicDao<E> {
    
    
    List<E> getData();
}

@Repository  //标识对象是数据存储对象,并且在容器中创建bean
public class ArraysDao implements BasicDao<Integer> {
    
    
    @Override
    public List<Integer> getData() {
    
    
        ArrayList<Integer>arrayList=new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        return  arrayList;

    }
}

Service层:通过Dao层获取数据集合

public interface BasicService {
    
    
    List<Integer> getArray();
}

@Service  //将对象标识为Service对象,并在容器中创建bean
public class ArrayService implements BasicService{
    
    
    @Autowired
    BasicDao arraysDao;
    @Override
    public List<Integer> getArray() {
    
    
        return arraysDao.getData();
    }
}

Controlloer层:


@RestController // =@ResponseBody +@Controller 标识是控制器对象
public class TestController {
    
    
    @Autowired //依赖注入,会自动注入符合BasicService接口的bean
    BasicService arrayService;

    @RequestMapping("/test")
    public List<Integer> test(){
    
    
        System.out.println(arrayService.getArray());
        return  arrayService.getArray();
    }
}

在程序运行时可以在该界面看到对应注解生成的java Bean。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44866921/article/details/133417264