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包

        <!-- spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.2.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 id="admin" class="com.kid.springpro.model.Admin"></bean>
</beans>

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

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

        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方法)

      <!--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>

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

    <!--通过构造方法赋值-->
    <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文件(加载数据)

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");

ClassPathXmlApplicationContext() 是Spring框架中的一个具体实现类,生成配置管理程序中对象
可以看做一个容器,所以一般把spring框架也称为Spring容器或者IOC容器
new ClassPathXmlApplicationContext("spring.xml");

getBean()方法使用

        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 --->欢迎大家和博主讨论问题 

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值