• 一文了解Spring框架


    目录

    SpringBoot VS Servlet

    Spring是什么? 

    loC:控制反转

    DI

    创建一个Spring项目

    创建一个Spring IOC容器 

    注册Bean对象 

    获取Bean对象 

    注意事项: 

    类注解 

    为什么有这么多类注解?

    注册与注入 

    方法注解 @Bean


    SpringBoot VS Servlet

    当我们用Servlet开发一个项目时步骤是:

    1. 创建Maven项目
    2. 配置pom.xml(添加需要的依赖包、添加webapp/WEB-INF/web.xml文件及内容)
    3. 添加Servlet代码:@WebServlet注解+重写doXXX方法
    4. 配置Tomcat:添加Tomcat
    5. 部署项目:破解版需要自己手动设置

    当我们用框架开发一个项目时:

    1. 创建maven项目
    2. 修改pom.xml:添加ee框架的依赖包(ee框架搭建项目还可以创建一个Spring Initializer的项目,或者在Sring官网下载一个项目模板)
    3. 准备spring约定的文件

    Spring是什么? 

    Spring框架即Spring Framework,它是一个开源框架,支持广泛的应用场景。用一句话概括就是:Spring是包含了众多方法的loC(控制反转)容器。那什么是loC呢?

    loC:控制反转

    实例化对象及组织对象间的依赖关系,都交给loC容器来进行管理,控制权由程序自己控制,转变为loC容器控制,控制权发生反转,所以叫loC容器。

    DI

    说到 IoC 不得不提的一个词就是 “DI” DI Dependency Injection 的缩写,翻译成中文是 依赖注入 的意思。
    所谓依赖注入,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。所以,依赖注入(DI )和控制反转( IoC )是从不同的角度的描述的同一件事情,就是指通过引入 IoC 容器,利用依赖关系注入的方式,实现对象之间的解耦。
    解耦:自己写代码来创建对象及组织依赖关系,属于强耦合的(就是一个地方改,依赖这个地方的其他地方都得改),使用框架后,框架自动给我们组织依赖关系,解耦。
    loC与DI :loC是一个目标也是一种思想,而DI是这个目标的具体实现

    创建一个Spring项目

    我用的是Maven的方式创建一个Spring项目,可以分为以下三步:

    1. 创建一个普通的Maven项目
    2. 添加Spring框架支持(Spring-context、Spring-beans)
    3. 添加启动类

    创建一个Spring IOC容器 

    ApplicationContext context=new AnnotationConfigApplicationContext("org.example");

    ApplicationContext就是Spring容器的顶级接口

    AnnotationConfigApplicationContext是其中一个实现类,它的作用是

    1. 扫描指定的包路径下,使用Spring框架注解的类(在上面代码扫描的是org.example)
    2. 注册这些类到容器中(框架帮我们new对象,及注入对象的依赖关系) 

    注册Bean对象 

    1. @Controller
    2. //@Service
    3. //@Repository
    4. //@Component
    5. public class Bean对象1 {
    6. public void sayHello(){
    7. System.out.println("Hello");
    8. }
    9. }

    @Controller
    //@Service
    //@Repository
    //@Component

    以上四个类注解都是用于注册Bean对象

    获取Bean对象 

    获取bean对象的方式有两种

    (1)通过Bean的类型

    1. (1)通过Bean的类型获取
    2. Bean对象1 b1=context.getBean(Bean对象1.class);

    (2)通过Bean的id

    1. (2)通过Bean的id
    2. Bean对象1 b1_1=(Bean对象1) context.getBean("bean对象1");

    注意事项: 

    • 一定要被扫描到,才能注册到容器中(一定要在指定的包路径下,指定类注解)
    • 默认注册到容器中的bean id,是类名首字母小写,如果类名开始两个连续字母大写,bean id就是类名
    • @Controller
      @Service
      @Repository
      @Component

    这四个注册Bean对象的类注解默认都是单例的方式注册,注册为普通的java bean对象,还有一个@Configuration注册为配置类对象

    类注解 

    想要将对象存储在Spring中,有两种注解类型可以实现:

    类注解:@Controller(控制器存储)、@Service(服务存储)、@Repository(仓库存储)、@Component(组件存储)、@Configuration(配置存储)

    方法注解:@Bean

    为什么有这么多类注解?

    这么多类注解,就是让程序员看到类注解之后,就能直接了解当前类的用途。

    程序的工程分层,调用流程如下:

    @Component:一般组件使用,除了以上明确含义的类注解作用,之前的作用,就可以使用AComponent注解。 

    注册与注入 

    注册bean对象:按框架约定的写法(目前是几个类注解),框架给我们new对象。

    注入依赖关系:按框架约定的写法(属性注解),框架给我们组织依赖关系(把容器中的对象赋值给属性)

    方法注解 @Bean

    类注解是添加到某个类上的,而方法注解是放到某个方法上的。

    1. @Configuration
    2. public class AppConfig {
    3. @Bean
    4. public Bean对象1 test_1(){
    5. Bean对象1 bean对象1=new Bean对象1();
    6. bean对象1.sayHello();
    7. return bean对象1;
    8. }
    9. }

    注意点:

    1. 只有类被扫描到,且注册到容器中,方法上的@Bean注解才生效
    2. @Bean注解的方法,所在的类,需要五种类注解之一(一般是在@Configuration配置类中)
  • 相关阅读:
    Vue实例声明详解
    node.js学习之路由、中间件
    熬了五年,马同学第一本书出版了!
    ros2与windows入门教程-创建工作空间和功能包
    oracle统计信息
    20220720学习反思
    [WPF]浅析资源引用(pack URI)
    Jenkins + 云效 前后端项目自动化部署
    面试题:什么是Reids的击穿、穿透、雪崩三种现象?如何解决?
    CentOS 配置 sftp 服务
  • 原文地址:https://blog.csdn.net/m0_61801103/article/details/127671414