• 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。
    在这里插入图片描述

  • 相关阅读:
    Elasticsearch安装
    智慧国土解决方案-最新全套文件
    【Linux进程间通信】 管道
    dataframe保存excel格式比csv格式小很多很多
    比 O(nlog(n)) 做得更好——创造合适的条件
    【附源码】Python计算机毕业设计万达影院售票管理系统
    Docker | redis安装及测试
    Qt 程序打包发布-windeployqt工具
    Oracle19c安装后,使用impdp导数,报错 ORA-01017:
    Word目录中自动添加自定义样式的多级标题的方法
  • 原文地址:https://blog.csdn.net/weixin_44866921/article/details/133417264