Spring基础篇:通过XML和注解两种方式配置Spring

130 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

Spring

常说Spring的两个特点是:IOC和AOP。

  • IOC作为一个容器,负责管理Bean(类)
  • AOP作为一个切面增强机制,可以做到不修改源代码的情况下对非业务功能进行增强。

这里我们先主要学习IOC

学习Spring的核心,先从一个依赖开始:

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

如何将类交给IOC管理

IOC是核心,它有两个配置方式,一个是通过配置文件XML的方式,另外一种是通过配置类注解的方式。

XML的方式

下面是一个固定模板,用来做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">

</beans>

我们通过让Spring管理一个类的例子了解一下简单的配置。

  1. 让Spring管理类,有两种类:第一个是自定义的类;第二个是JAR包中的类。

如果是自定义的类,我们首先需要自定义一个类。假设在top.chengyunlai.bean包下有一个Person

public class Person {

}
  1. 需要在XML文件中定义该类

需要用到一个标签:<bean>,被这个标签定义后,表示该类由Spring的IOC进行管理。 这个标签中有两个属性:idclass

  • id:该bean在IOC容器中叫什么名字,定义后,可以通过名字的方式取到该bean
  • class:该bean的全类路径在哪里(必填)
<bean id="person" class="top.chengyunlai.bean.Person"></bean>

如果省略id,就只能通过类型取到该bean

配置类注解的方式

配置类也是一个普通的自定义类,它得有一个标识:@Configuration;然后<bean>标签,在这里面是通过@Bean替换。配置文件中的class全类路径是通过,方法的方式获得被管理的Bean,先手动将需要被管理的类New出来,所以方法的返回值是被管理的Bean类型。id属性可以在@Bean中进行声明。

@Configuration
public class ApplicationConfig {
    // 可以直接在 `@Bean` 注解上显式的声明 Bean 的 id ,只不过在注解驱动的范畴里,它不叫 id 而是叫 **name**
    @Bean("MyPerson")
    public Person person(){
        Person person = new Person();
        return person;
    }
}

读取配置

因为有两种配置方式,所以读取也是有两种方式。

  1. ClassPathXmlApplicationContext,对应的是配置文件
  2. AnnotationConfigApplicationContext,对应的是配置类

读取配置文件

定义一个主类,编写Main方法,在Main方法中写如下代码:

  1. 读取配置文件 其中xxx/applicationConfig.xml是在resources文件下的路径。
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("xxx/applicationConfig.xml");
  1. 读取配置类 其中ApplicationConfig.class是在配置类。
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);