【EE进阶】Spring

本文探讨了为何学习框架的重要性,重点讲解了Spring框架,包括Spring的IoC容器和DI(依赖注入)概念。Spring IoC容器负责管理Bean对象的生命周期和依赖关系,实现解耦。DI则是IoC的一种实现方式,通过框架自动注入依赖,降低耦合度。文中还提到了Spring框架中Bean的注册和@Beans注解的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、为什么学习框架?

1. 学习框架相当于从“小作坊”到“工厂”的升级,小作坊什么都要自己做,工厂是组件式装配,特点就是高效。
2. 框架更加易用、简单且高效

第三方框架使用也越来越多,几乎所有的java项目都会使用的基础框架,叫做javaee框架;我们学习基础的框架SSM==》几大框架的简称:Spring Framework+SpringMVC+MyBates.

  • Spring Framework:基础框架,包含很多组件;
  • SpringMVC:web开发;
  • MyBates:操作数据库的框架;

基于这些框架,对比之前的servlet、jdbc,灵活性,易用性,扩展性有很大提升。

SpringBoot 相比于 Servlet 的优点总结:

  1. 添加外部 jar 更容易,不易出错(版本问题无需关注);
  2. 调试项目更加方便,无需配置 Tomcat;
  3. 发布项目更加方便,无需配置 Tomcat;
  4. 添加路由更加方便,无需每个访问地址都添加一个类

使用框架,主要要学习更多的注解;

框架代码执行流程/顺序,与servlet相似,需要根据约定,先执行某个符合约定的类中哪个符合约定的方法,然后再执行其他哪个。(可能不知识程序本身调用的某个方法,而是在某个时间点或者某个事件,框架给我们调用某个方法)

Spring框架:Spring Framework

一个开源框架,包含着Spring容器/IoC容器、SpringMVC、SpringAOB。

1. IoC容器/Spring容器

对于Spring IoC容器来说,是管理Bean对象的容器。

Bean对象:普通的实力对象,(单纯从存放数据的角度看,和集合框架是一样的;)

但是其次还是有区别的;

使用集合存放队象:程序自己new,存储数据,调用队象的方法;

使用Spring容器存放队象:程序不需要自己去new,某些符合框架约定的方法是框架自动调用;(

需要框架管理,才放进去(不需要程序自己new)

不需要框架管理的,还是要自己去new。

IoC容器    vs     传统开发

85a7e5d8bc3b4ab0b9e399a21c6bb7ed.png

使用IoC:按照框架约定的写法,就可以实现,框架统一管理Bean队象是生命周期(new,某些生命周期方法),bean队象之间的依赖关系。

2. DI:依赖注入

是从不同角度描述的同一个事情,有IoC容器运行时,自动的组织队象间的依赖关系(队象中的依赖(引用),框架自动给我们注入)

DI 和 IoC:

IoC是一种设计思想,他的实现方式包括IoC容器,而IoC容器的实现方式包括DI。

作用

解耦:

1. 自己写的代码来创建的队象及组织依赖关系,是强耦合的(一个对象需要修改代码,其他依赖这个对象的地方,也得改)。

2. 使用框架后,框架会给我们自动组织依赖关系,解耦。

 原理:

三、开发方式

package org.example.model;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;


// 以下四种注解都可以使用,都是类注解,用于注册Bean对象
@Controller
//@Service
//@Repository
//@Component
public class Bean对象1 {
    public void sayHello() {
        System.out.println("Hello");
    }
}
public class Spring启动类 {
    public static void main(String[] args) {
        //ApplicationContext是Spring容器的顶级接口
        //AnnotationConfigApplicationContext是其中一个实现类,
        // 作用:
        //  1. 扫描指定包路径下,使用Spring框架注解的类。
        //  2. 注册这些类到容器中=》框架帮助我们new对象,及注入队象依赖关系
        ApplicationContext context
                = new AnnotationConfigApplicationContext("org.example");
        // 获取Bean对象的两种方式
        //  1. 获取Bean对象的id
        //  2. 获取Bean对象的类型
        Bean对象1 b1_1 = context.getBean(Bean对象1.class);
        System.out.println(b1_1);
        Bean对象1 b1_2 = (Bean对象1) context.getBean("bean对象1");
        System.out.println(b1_2);
    }
}

注意事项:

1.一定要被扫描到;

2.默认注册到容器中的bean id(名称),是类名的小写字母

3.默认类注解:

  1. @Controller
  2. @Service
  3. @Repository
  4. @Component
  5. @Configuration。
     

1~4是注册为普通的java bean对象;5是注册为配置类对象。

四、@Bean

package org.example.config;

import org.example.model.Bean对象2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public Bean对象2 testBean2_1() {
        return new Bean对象2();
    }

    @Bean
    public Bean对象2 testBean2_2() {
        return new Bean对象2();
    }
}
        Bean对象2 b2_1 = (Bean对象2) context.getBean("testBean2_1");
        System.out.println(b2_1);

        Bean对象2 b2_2 = (Bean对象2) context.getBean("testBean2_2");
        System.out.println(b2_2);

//        Bean对象2 b2_1 = (Bean对象2) context.getBean(Bean对象2.class);
//        System.out.println(b2_1);

此时只能用类名的方法来获取对象。

实用类注解:默认是单例模式注册。

使用Bean注解:一个类型可以注册多个实例对象。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值