理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

简介: 理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

Spring是一个包含众多工具等Ioc容器

对象这个词在Spring范围内,称为bean

Spring两大核心思想

1.IOC    (IOC是控制反转,意思是控制权反转-控制权(正常是谁用这个对象,谁去创建,)-控制对象的控制权,反转的意思是创建对象的控制权,交给了Spring)

优点:解耦合

高内聚:一个模块内部的关系

低耦合:各个模块之间前的关系

2.AOP

list/map装数据的容器

tomcat装的是web的容器

Spring容器,装的是对象

引入案列(为什么推荐用Spring)

上面代码的改动成本太大,耦合性太高

如果改成代码这种,传递的是对象,就直接给对象

不采用生成对象,而是你给我什么我就用什么这种,也就是你需要往里面(就像是下面这个图,在main中传递对象。)

IOC帮助我们做这个工作。

Spring可以帮助我们创建对象,可以往里面存,也可以从这个里面取,

我们要做的也就是1.告诉Spring,帮我们创建对象,2.知道如何取出来这些对象

DI是一种实现方式(依赖注入)

@Autowired
    private BookService bookService;

假如说加上,上面的Autowired就相当于下面的这个意思

Autowired:告诉Spring,从容器中取出这个对象,赋值给当前对象的属性

 private BookService bookService;
    
    public BookController(){
        bookService=new BookService();
    }
@Component:告诉Spring,帮助我们存储对象。
@Component
public class BookService {
    @Autowired
     private BookDao bookDao;
//    private BookService bookService;
//
//    public BookController(){
//        bookService=new BookService();
//    }
    public List<BookInfo> getBookList() {
 
        List<BookInfo> bookInfos = bookDao.mockData();
        for (BookInfo bookInfo : bookInfos) {
            if (bookInfo.getStatus() == 1) {
                bookInfo.setStatusCN("可借阅");
            } else {
                bookInfo.setStatusCN("不可借阅");
            }
        }
        return bookInfos;
    }
}

MVC提供了注解,前面的RequestMapping。

IOC(依赖对象的创建的控制权,存)一种思想,DI(依赖注入)是一种实现方式

DI是把依赖对象取出来,并且赋给该对象属性(取)

DI主要通过两类注解类型可以实现

IOC提供两类注解

1.类注解:@Controller,@Service,@Respository,@Component,@Configuration

2.方法注解:@Bean

1. packapackage com.example.IOCtry;
 
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
//加上Controller才会不报错,假如不加上Controller就会报错
//@Controller
public class UserController {
 
public void prin(){
    System.out.println("春节快乐");
}
}
package com.example.IOCtry;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
 
@SpringBootApplication
public class IoCtryApplication {
 
    public static void main(String[] args) {
        //启动类是帮助我们启动spring,这个命令可以返回一个spring
        //context上下文,就是spring一个运行环境
        ApplicationContext context=SpringApplication.run(IoCtryApplication.class, args);
        //从容器中拿对象
        UserController bean=context.getBean(UserController.class);
        //如果去掉Control注解,就会报错
        bean.prin();
    }
 
}

会报这个错误,意思是说没哟拿到bean这个对象

下面这个是getBean的根据名称拿一个类(注意:这个的获取规范是小驼峰),注意这个返回的是一个Object,所以我们需要对他进行类型转换

第三种:根据名称和类名拿

 public static void main(String[] args) {
        //启动类是帮助我们启动spring,这个命令可以返回一个spring
        //context上下文,就是spring一个运行环境
        ApplicationContext context=SpringApplication.run(IoCtryApplication.class, args);
        //从容器中拿对象
        UserController bean=context.getBean(UserController.class);
        //如果去掉Control注解,就会报错
        bean.prin();
        UserService bean2=context.getBean(UserService.class);
        bean2.doService();
        UserService bean3=(UserService) context.getBean("userService");
        bean3.doService();
        //根据名称和类型获取bean
        UserService userService=context.getBean("userService",UserService.class);
        userService.doService();
 
    }
 
}

⚠️特殊情况:假如类名前两位(第一位,第二位字母)都是大写的情况,bean的名称是类名

常见面试题ApplicationContext   vs      BeanFactory

获取bean对象,是父类BeanFactory提供的功能

继承关系和功能方面来说:Spring容器有两个顶级的接口:BeanFactory和ApplicationContext.其中BeanFactory提供基础的访问容器能力,而ApplicationContext属于是BeanFactory的子类,他除了继承了BeanFactory的所有功能之外,他还拥有独特的特性,国际化支持(中日韩等语言)资源访问支持,以及事件传播等方面的支持

从性能方面来说:ApplicationContext是一次性加载并初始化所有的Bean对象,而BeanFactory是需要哪个就去加载哪个,因此会更加清量(空间与时间)

@Service(服务存储)和下面使用方法一致
@Repository(仓库存储)和control使用方法一致
@Repository
public class UserRepository {
    public void doRepository() {
        //代码格式化快捷键,crtl+alt+l
            System.out.println("aini");
        }
    }
 UserRepository userRepository=context.getBean(UserRepository.class);
        userRepository.doRepository();
@Component(组件存储)和下面用法一致
@Configuration(配置存储)
//        UserRepository userRepository=context.getBean(UserRepository.class);
//        userRepository.doRepository();
//        UserComponent userComponent=context.getBean(UserComponent.class);
//        userComponent.doComponent();
      UserConfig userConfig=context.getBean(UserConfig.class);
      userConfig.doConfig();
    }
package com.example.IOCtry.config;
 
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class UserConfig {
    public void doConfig(){
        System.out.println("我也是条狗");
    }
}
为什么要去分层,假如说都用一个注解不行吗?-这就跟车牌号一样,方便管理,也节约号码

常见面试题二

常用的注解有哪些?分别是什么作用

web url映射:@RequestMapping

参数接口和接口响应:@RequestParam,@RequestBody,@ResponseBody

Bean的存储:@Controller,@Service,@Repository,@Component,@Configuration,@Bean

Bean的获取:@Autowired,@Qualifier,@Resource


相关文章
|
2月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
226 26
|
1月前
|
JSON 前端开发 Java
Spring MVC常用的注解
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中 的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 @Controller:控制器的注解,表示是表现层,不能用用别的注解代替 @RestController : 组合注解 @Conntroller + @ResponseBody @GetMapping , @PostMapping , @Put
|
1月前
|
Java Spring
Spring Boot的核心注解是哪个?他由哪几个注解组成的?
Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 : ● @SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能; ● @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项 ● @ComponentScan:Spring组件扫描
|
1月前
|
Java 容器 Spring
什么是Spring IOC 和DI ?
IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转 移,从程序代码本身转移到了外部容器。 DI : 依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。
|
1月前
|
Java 测试技术 Spring
SpringBoot+@Async注解一起用,速度提升
本文介绍了异步调用在高并发Web应用性能优化中的重要性,对比了同步与异步调用的区别。同步调用按顺序执行,每一步需等待上一步完成;而异步调用无需等待,可提升效率。通过Spring Boot示例,使用@Async注解实现异步任务,并借助Future对象处理异步回调,有效减少程序运行时间。
|
25天前
|
人工智能 缓存 自然语言处理
保姆级Spring AI 注解式开发教程,你肯定想不到还能这么玩!
这是一份详尽的 Spring AI 注解式开发教程,涵盖从环境配置到高级功能的全流程。Spring AI 是 Spring 框架中的一个模块,支持 NLP、CV 等 AI 任务。通过注解(如自定义 `@AiPrompt`)与 AOP 切面技术,简化了 AI 服务集成,实现业务逻辑与 AI 基础设施解耦。教程包含创建项目、配置文件、流式响应处理、缓存优化及多任务并行执行等内容,助你快速构建高效、可维护的 AI 应用。
|
1月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
44 0
|
2月前
|
监控 Java Spring
SpringBoot:SpringBoot通过注解监测Controller接口
本文详细介绍了如何通过Spring Boot注解监测Controller接口,包括自定义注解、AOP切面的创建和使用以及具体的示例代码。通过这种方式,可以方便地在Controller方法执行前后添加日志记录、性能监控和异常处理逻辑,而无需修改方法本身的代码。这种方法不仅提高了代码的可维护性,还增强了系统的监控能力。希望本文能帮助您更好地理解和应用Spring Boot中的注解监测技术。
90 16
|
8月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
4月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
110 12
下一篇
oss创建bucket