• 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;
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

  • 相关阅读:
    机器学习实战:回归
    realloc
    android WindowManager的简单使用
    C++20并发编程之线程闩(std::latch)和线程卡(std::barrier)
    分享在Windows操作系统中独立安装微软MS Access 2019数据库的实用方法
    unity的乐高世界
    万向区块链小课堂:超短文梳理区块链层级,字字珠玑
    R语言使用caret包的modelLookup函数查看模型算法的细节信息、模型是否可用于分类、回归、超参数信息、是否是概率模型
    redis学习归纳
    深入理解hbase(三)Hbase中的BucketCache
  • 原文地址:https://blog.csdn.net/weixin_44866921/article/details/133417264