首页 > 其他分享 >spring

spring

时间:2024-12-25 19:09:35浏览次数:3  
标签:依赖 spring app bean IOC Teacher

什么是spring(春天)?
1.spring它是一款开源框架,它用来解决企业开发的复杂性。
2.spring框架提供了两个核心技术:IOC和AOP
IOC:控制反转。把创建对象的权力交于spring框架来创建。并且管理对象的生命周期
AOP:面向切面编程。在不改变源码的基础可以对我们的代码进行扩展。
3.spring框架有什么特点:
1.方便解耦,简化开发。
2.AOP编程的支持--更方便对源码进行扩展
3.声明式事务的支持
4.方便集成各种优秀框架--mybatis hibernate mybatis-plus 等
5.方便程序的测试--spring提供了自己的单元测试。
为什么使用spring?

控制正转 会出现类与类之间耦合。 缺点:可维护性差。
使用工厂模式+接口解决控制正转的缺陷

工厂模式虽然解决了等号右边创建对象的依赖的问题,但是没有解决等于左边的依赖问题。可以使用接口。如果这时1000个依赖Food的类,Food即使升级为Food1也只需要改变FoodFactory中这一处代码即可。我们自己通过工厂模式+接口虽然解决了上面类与类之间的依赖关系。但是还有很多考虑不周的地方,那么是否存在一款框架能更好的解决上面的依赖关系吗?--有。spring提供的IOC技术。IOC底层使用的就是工厂模式。
spring-IOC
1 IOC概述
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,交于spring容器来帮你创建类对象。
IOC: 把创建对象的权力交于spring框架来完成。
DI: 自动注入给依赖的对象。
2 如何使用IOC功能
依赖

        <!--springmvc  springboot  spring  springsecurity这些都是spring全家桶-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>

spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!--bean:表示spring容器关联的类对象标签。
           id: bean的唯一标识
           class:表示spring管理的类名
    -->
    <bean id="food2" class="com.ykq.demo02.Food"></bean>

</beans>

测试

public class Test {
    public static void main(String[] args) {
//        Food food=new Food();
//        food.info();

        //1.加载spring容器。
        ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
        //2.获取指定的对象
        IFood food= (IFood) ac.getBean("food2");
        food.info();
    }
}

3 获取bean的方式
根据id获取

public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//读取spring配置文件。 获取spring容器
        Teacher t = (Teacher) app.getBean("t"); //从容器中获取指定id的bean.
        t.eat(); //调用方法
    }

缺点: 需要强制转换。类型转换安全隐患。
通过反射类获取

 public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//读取spring配置文件。 获取spring容器
//        Teacher t = (Teacher) app.getBean("t"); //从容器中获取指定id的bean.
        Teacher bean = app.getBean(Teacher.class); //从容器中获取指定类型的bean
        bean.eat();
    }

如果容器中出现多个同类型的bean则出现错误。
通过id和反射类结合获取bean

public class Test02 {
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//读取spring配置文件。 获取spring容器
//        Teacher t = (Teacher) app.getBean("t"); //从容器中获取指定id的bean.
//        Teacher bean = app.getBean(Teacher.class); //从容器中获取指定类型的bean
        Teacher bean = app.getBean("t1", Teacher.class); //根据id和反射类结合获取
        bean.eat();
    }
}

4 使用注解完成bean的创建
上面我们在xml文件中通过bean标签,已经完成了bean创建交于spring来管理。如果有大量的类都需要交于spring创建,那么我们就需要在xml中写大量的bean标签。spring提高了注解方式。

常用注解都有哪些?

@Component: 不属于下面三层任意一个。建议使用这个。

@Service:表示业务层交于spring管理

@Controller: 表示控制层类交给spring

@Repository: 表示dao层类交于spring管理


@Service 和@Controller @Repository注解等价于@Component. 因为我们的代码是否是要分层编写。dao,controller,service业务层。 不同层可以使用不同的注解加以区分。
5 springbean的作用域。

  1. singleton: 单例--spring创建该bean时只创建一次。
  2. prototype: 多例--每次获取bean对象时,都会创建一个新的bean对象。
  3. request: 每次请求创建一个bean对象。
  4. session: 同一个会话创建一个bean对象。

request和session适合在web开发模式下使用。


spring完成依赖注入DI
上面我们知道spring可以帮你完成bean对象的创建。 如果某个类依赖另一个类对象。我们也可以使用spring的di功能。

DI( Dependency Injection ):依赖注入 就是给对象中的属性注入相应的值.

IOC控制反转的最终目的就是降低程序的耦合,也就是削减依赖关系。

依赖关系的管理以后都交给spring维护,依赖关系的管理就称之为依赖注入。也就是说在当前类需要用到其它类的对象时,由spring为我们提供,我们只需要在配置文件中说明依赖关系的维护就可以了。

1 注入的方式有哪些?
第一种通过set方法注入。

第二种通过构造方法注入

标签:依赖,spring,app,bean,IOC,Teacher
From: https://www.cnblogs.com/xiaomubupi/p/18631259

相关文章

  • SpringBoot 集成RabbitMQ
    springboot集成MQ 配置文件配置类 发送者 消费者 调用   ......
  • springboot毕设 协同过滤的潮流商品推荐系统程序+论文
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为人们日常生活的重要组成部分。在海量商品信息中,如何精准地为用户推荐符合其兴趣和需求的商品,成为电商平台亟需解决的关键问题。潮流商品作为电商领域的一个热门分支,其推荐系统的构建尤为重要。......
  • springboot毕设 猫咖管理系统程序+论文
    系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,人们越来越注重休闲放松和与宠物的互动。猫咖作为一种结合了咖啡馆与猫咪陪伴的新型休闲场所,近年来在全球范围内迅速流行。猫咖不仅为顾客提供了一个品尝咖啡、享受美食的舒适环境,还允许顾客与店内温顺的猫咪进行......
  • 从源码角度查看SpringBoot是怎样获取到Bean的
    背景:我们都知道在SpringBoot启动类上添加@SpringBootApplication注解后执行main方法就可以自动启动服务Spring会自动帮我们找到需要管理的Bean的呢探究:经典的八股文AbstractApplicationContext#refresh()方法相信大家已经比较熟悉了进入invokeBeanFactoryPostProcess......
  • springboot毕设 协同过滤算法商品推荐系统程序+论文
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为人们日常生活的重要组成部分。在海量商品信息面前,用户往往难以快速找到符合自己兴趣和需求的商品。传统的搜索方式依赖于用户主动输入关键词,但这种方式往往受限于用户的表达能力和对商品描述的......
  • springboot毕设 健身房管理系统程序+论文
    系统程序文件列表开题报告内容研究背景随着健康意识的不断提升,健身已成为现代人生活中不可或缺的一部分。健身房作为提供健身服务的重要场所,其管理效率和服务质量直接影响到会员的健身体验和满意度。近年来,随着健身行业的快速发展,传统的人工管理方式已难以满足健身房日益增......
  • Spring事物this调用当前类中的带事务方法导致事物失效
    ApplicationContext获取代理后的当前类调用当前类的事物方法时,如果使用this会导致获取的MainService这个对象本身,而非事物AOP后的MainService代理对象,所以一定要用ApplicationContext从IOC容器中获取。MainService事务调用A和B方法packagecom.example.transactiondemo.service......
  • Spring Cloud 负载均衡器架构选型
    优质博文:IT-BLOG-CN我们这次项目主要从RestTemplate和Feign进行选型分析。一、SpringCloudFeign分析Feign是另外一种客户端负载均衡实现。我在该模块写了FeignClient的示例代码。【1】spring-cloud-web-demo-api为服务的sdk模块【2】spring-cloud-web-demo-se......
  • Spring Boot和Spring Cloud
    1.SrpingBootSpringBoot是一款基于JAVA的开源框架。目的是为了简化Spring应用搭建和开发流程。是目前比较流行,大中小型企业常用的框架。SpringBoot核心原理是自动装配(自动配置)。在这之前,开发一个JavaWeb,Spring等项目要进行很多配置,使用了SpringBoot就不用在过多考虑这些方面。......
  • Java基于springboot+vue的校内兼职信息管理系统
    收藏关注不迷路!!......