Spring框架搭建 ▎bean标签 ▎注解方式

前言:

Spring框架因其灵活性和强大功能而广受欢迎,特别是在企业级应用程序的开发中。其核心概念"控制反转"(IoC)和"面向切面编程"(AOP)使得对象管理变得更加高效。

在Spring中,Bean是被Spring容器管理的对象,其定义和管理方式主要有XML配置和注解两种。近年来,基于注解的方式因其简洁性和可读性渐受青睐。

本文将探讨Spring框架中的Bean管理,重点比较XML标签与注解方式的优缺点,帮助开发者更好地理解和应用Spring,以提升开发效率与代码质量。

Spring简单理解

Spring是什么呢?

Spring是一个轻量级的,IOCAOP一站式Java开发框架,简化企业级开发

  1. 轻量级:框架体积小(核心模块)
  2. IOC:Inversion of Control(控制反转),把创建对象的控制权反转给spring框架
  3. AOP:Aspect Oriented Programming(面向切面编程)
  4. 一站式:除了核心的IOC和AOP功能之外,还对数据访问层,Web层都有封装,所以是一站式

面向切面变成

将程序中的一些公共的非业务代码 分离提取出来,然后在业务代码 执行时,给他们横切进来 .使用的动态代理的机制实现,在我们的业务代码,不显示的调用,但是执行业务代码,会通过代理对象,调用非业务代码

Spring框架搭建(Hello World搭建)

第一步:Maven导入Spring核心jar包

XML 复制代码
        <!-- spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>

第二步:编写spring配置文件

XML 复制代码
<?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 id="admin" class="com.kid.springpro.model.Admin"></bean>
</beans>

第三步:编写一个Admin实体类

java 复制代码
package com.kid.springpro.model;


import org.springframework.stereotype.Component;

public class Admin {

    private String account;
    private String password;


    public Admin() {
        System.out.println("admin无参构造方法");
    }

    public Admin(String account, String password) {
        this.account = account;
        this.password = password;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

第四步:测试spring

java 复制代码
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        Admin admin = (Admin) applicationContext.getBean("admin");
        Admin admin1 = applicationContext.getBean("admin", Admin.class);

        System.out.println(admin);
        System.out.println(admin1);

结果:

代码解释:

<bean id="admin" class="com.kid.springpro.model.Admin"></bean> ---->bean标签(下文解释)

上图结果所示:二个对象打印出的结果相同,这是因为spring只生成一个对象,所以打印出来相同,但是这个属性可以在bean标签中设置 (scope="singleton" )

Bean标签

bean标签是往spring管理中添加数据,也就是我们通过bean标签从而让spring管理类

Bean标签属性

  1. id="对象名称",可以在getBean中获得spring生成的对象
  2. class="需要Spring管理的类的地址"
  3. scope="配置bean的作用域"
  4. scope="singleton" 单例的(默认值) 在Spring框架启动时,就创建对象,而且始终只创建一个对象
  5. scope="prototype" 原型的(多例的) 在每次获得对象时,创建一个新的对象

当scope的取值为singleton时

Bean的实例化个数:1个

Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

Bean的生命周期:

  • 对象创建:当应用加载,创建容器时,对象就被创建了
  • 对象运行:只要容器在,对象一直活着
  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁了

当scope的取值为prototype时

Bean的实例化个数:多个

Bean的实例化时机:当调用getBean()方法时实例化Bean

Bean生命周期

  • 对象创建:当使用对象时,创建新的对象实例
  • 对象运行:只要对象在使用中,就一直活着
  • 对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了

Bean生命周期配置

init-method:指定类中的初始化方法名称

destroy-method:指定类中销毁方法名称

Bean注入依赖

set注入(类中必须有set方法)

XML 复制代码
      <!--1.通过属性,属性的set方法-->
        <bean id="admin" class="com.kid.springpro.model.Admin" scope="prototype">
            <property name="account" value="admin"></property>
            <property name="password" value="111"></property>
        </bean>

构造方法注入(必须有 有参构造)

XML 复制代码
    <!--通过构造方法赋值-->
    <bean id="admin" class="com.kid.springpro.model.Admin" scope="prototype">
        <constructor-arg name="account" value="admin"></constructor-arg>
        <constructor-arg name="password" value="111"></constructor-arg>
    </bean>

IOC(控制反转)

控制反转不是一种技术, 而是一种思想 ,就是将原本在程序中手动创建对象的控制权,交给Spring框架来管理.

IOC容器负责对象的实例化 ,对象的初始化 ,对象和对象的依赖关系 ,对象的销毁,对外界提供对象的查询等操作,对象的整个生命周期都是由容器来控制.

正控:若要使用某个对象,需要自己去负责对象的创建

反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象, 不关心对象的创建过程,也就是把创建对象的控制权反转给了 Spring 框架

通过<bean>标签将对象添加到IOC容器中

ClassPathXmlApplicationContext方法

读取Spring.xml文件(加载数据)

java 复制代码
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");

ClassPathXmlApplicationContext() 是Spring框架中的一个具体实现类,生成配置管理程序中对象

可以看做一个容器,所以一般把spring框架也称为Spring容器或者IOC容器

new ClassPathXmlApplicationContext("spring.xml");

getBean()方法使用

java 复制代码
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        Admin admin = (Admin) applicationContext.getBean("admin");
        Admin admin1 = applicationContext.getBean("admin", Admin.class);

getBean("id") id---->也就是bean标签中的id

Spring注解开发

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效

@Component 使用在类上用于实例化Bean

@Repository 使用在dao层类上用于实例化Bean

@Autowired 自动注入。用于在属性和属性的set方法上,如果写在属性上, set方法都可以不需要。默认情况下,要注入的值不能为空(required = true)

@Resource 是Java语言中提供的注解标签 不允许注入的值为空,添加在属性上,也不需要写set方法

@Scope 标注Bean的作用范围

Scope设置:

@Scope( value = "prototype") 原型

@Scope( value = "singleton") 单例

注解与 XML 的对比

注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。

注解缺点:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。

xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重 启服务器即可将新的配置加载。

xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。



感谢大家的观看,本次分享就到这里。希望我的内容能够对您有所帮助。创作不易,欢迎大家多多支持,您的每一个点赞都是我持续更新的最大动力!如有不同意见,欢迎在评论区积极讨论,让我们一起学习、共同进步!如果有相关问题,也可以私信我,我会认真查看每一条留言。期待下次再见!

希望路飞的笑容可以治愈努力路途中的你我!

博主vx:Dreamkid05 --->欢迎大家和博主讨论问题

相关推荐
阿华的代码王国1 小时前
MySQL ------- 索引(B树B+树)
数据库·mysql
哈喽,树先生1 小时前
1.Seata 1.5.2 seata-server搭建
spring·springcloud
Hello.Reader2 小时前
StarRocks实时分析数据库的基础与应用
大数据·数据库
执键行天涯2 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
liupenglove2 小时前
golang操作mysql利器-gorm
mysql·golang
yanglamei19622 小时前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
叫我:松哥2 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
工作中的程序员2 小时前
ES 索引或索引模板
大数据·数据库·elasticsearch
严格格2 小时前
三范式,面试重点
数据库·面试·职场和发展