Spring容器 使用 和 执行流程 ,注解 你真的会吗?(让你一下通透~)

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 Spring容器 使用 和 执行流程 ,注解 你真的会吗?(让你一下通透~),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

目录

前言

一、ApplicationContext 和 BeanFactory 的区别

二、主要工作流程

三、开发步骤

3.1、创建Maven项目

3.2、创建Spring的核心配置文件

3.3、Spring注解

3.3.1、类注解

3.3.2、五大类注解的关系

3.3.3、方法注解

3.3.4、属性注入

3.3.5、五大注解关系图(一看就懂)

3.4、创建程序入口类

3.5、跟Spring打声招呼吧~(使用Bean对象)

小结


前言

        Spring提供了两大顶级接口可以获取Spring对象,他们分别是 ApplicationContext 和 BeanFactory,而我们日常开发主要使用的是 ApplicationContext,BeanFactory已经过时,因此本文主要围绕ApplicationContext来介绍~


一、ApplicationContext 和 BeanFactory 的区别

相同点:

1.都可以得到Spring对象(Spring上下文)。

2.都是来自Spring的顶级接口。

不同点:

1.继承关系:ApplicationContext 属于 BcanFactory 的子类。

2.功能:BcanFactory只有最基础访问Bean的能力,而ApplicationContext 除了拥有 BeanFactory功能之外,还包含了更多功能,如:国际化支持、资源访问、时间传播等。

3.性能:ApplicationContext 加载方式是将 Bean 对象一次性加载,所以在访问 Bean 对象时会很快(饿汉模式,但也不完全是,现在的高版本会根据你电脑的情况智能的去加载,如果刚开始加载时系统资源比较紧张,就会放到后面加载);BeanFactory 只有需要在需要某个 Bean 时,才会加载 Bean 对象, 所以它在执行 Bean 获取时,比较慢(懒汉模式)。


二、主要工作流程

Spring容器 使用 和 执行流程 ,注解 你真的会吗?(让你一下通透~)

Spring容器 使用 和 执行流程 ,注解 你真的会吗?(让你一下通透~)


三、开发步骤

3.1、创建Maven项目

首先需要在pom.xml配置文件中引入相关依赖,引入完后记得刷新Maven~

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>spring-demo2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>

</project>

3.2、创建Spring的核心配置文件

在src/main/resources下创建一个xml文件用来声明加载Bean对象;

base-package是用来扫描指定包下的Spring注解,找到对应的Bean对象,加载到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"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--base-package表示要扫描的路径-->
    <content:component-scan base-package="com.demo.component"></content:component-scan>
</beans>

3.3、Spring注解

3.3.1、类注解

        放在类上的,将对象存储到Spring中的五大注解,他们的功能相同,只是用来标识功能的(仅限Spring,在Spring Boot 和Spring MVC 中功能天差地别),方便程序员辨别;

@Controller(控制器):归属于业务逻辑层,用来控制用户的行为,它用来检查用户参数的有效性。(前端的请求合理性负责)

@Service(服务):归属于服务层,调用持久化类实现相应的功能,不直接和数据库交互,类似于控制中心。(对前端请求的功能负责)

@Repository(仓库):归属于持久层,是直接和数据库进行交互的,通常一个表都会对应一个@Repository。(对数据库负责)

@Component(组件):归属于公共工具类,提供某些公共方法。(工具类)

@Configuration(配置):归属于配置层,是用来配置当前项目的一些信息;(对项目的全局配置负责)

3.3.2、五大类注解的关系

@Component 是 @Controller、@Service、@Repository、@Configuration 的父类;

3.3.3、方法注解

注意:(一定需要配合5大注解一起使用,否则无效)

@Bean:放在方法上,将当前修饰方法的返回的对象存储到Spring中。(可以自定义一个或多个name属性,一旦设置了name属性,原方法名就不能获取对象了,只能使用设置的name获取)

3.3.4、属性注入

可以将其他类的Bean对象,注入到本类作为属性;

@Autowired :通常用来将 Service 类注⼊到 Controller 类中(可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊);

@Resource 只能⽤于 Setter 注⼊和属性注⼊;

@Autowired 和 @Resource 的区别:

出身不同:@Autowired 来⾃于 Spring,⽽ @Resource 来⾃于 JDK 的注解;

使⽤时设置的参数不同:相⽐于 @Autowired 来说,@Resource ⽀持更多的参数设置,例如 name 设置,根据名称获取 Bean。

注入范围不同:@Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊,⽽ @Resource 只能⽤于 Setter 注 ⼊和属性注⼊,不能⽤于构造函数注⼊;

3.3.5、五大注解关系图(一看就懂)

Spring容器 使用 和 执行流程 ,注解 你真的会吗?(让你一下通透~)

3.4、创建程序入口类

        有了这个程序入口类,我们就可以获取Spring对象了,同时,获取Spring时需要给一个参数,这个参数就像是创建Spring容器的一个指导书(声明加载Bean对象的xml文件),这个 指导书就会告诉Spring需要将哪些Bean对象注入到容器(这里其实还有很多方式,但那些方式比较low,这里我们只需要掌握:扫描对应包下注解的方式);

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //获取Spring对象(Spring上下文)
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
    }
}

3.5、跟Spring打声招呼吧~(使用Bean对象)

        我们可以在扫描的包下创建一个Bean对象,通过上面步骤获取了Spring对象之后,就可以通过getBean方法获取Bean对象啦~

注意:getBean的参数有些讲究

1. 当类名首字母和第二个字母都是大写的时候,那么类名本身就是它的name属性;

2. 其他情况,均按照类名首字母小写的形式,填写name属性;

import com.demo.component.ArticleController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //获取Spring对象(Spring上下文)
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        //获取Bean对象,这里第一个参数是Spring自己生成的身份标识,默认是类名(第一个首字母小写)
        ArticleController articleController =
                context.getBean("articleController", ArticleController.class);
        //使用Bean对象
        System.out.println(articleController.sayHello());
    }
}

你好,Spring!

Spring容器 使用 和 执行流程 ,注解 你真的会吗?(让你一下通透~)


小结

你学费了吗?


 Spring容器 使用 和 执行流程 ,注解 你真的会吗?(让你一下通透~)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/130391.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!