扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: Java > Spring高频面试题 > 15.如何给Spring容器提供配置元数据?Spring有几种配置方式?

Spring配置元数据的方式主要有三种方式:

  • 基于XML文件配置元数据
  • 基于注解配置元数据
  • 基于Java类配置元数据

之前举了很多例子都是基于XML文件配置元数据,下面简单说说基于注解和基于Java类配置元数据

基于注解配置元数据

其实无论是XML文件还是注解,本质上都是为Spring容器提供Bean定义的信息,采用XML文件和采用注解的区别就是,采用XML文件配置元数据时,Bean定义信息和Bean实现类本身是分离的,而采用注解配置元数据时,Bean定义信息可以在Bean实现类上直接标注注解实现。

前面刚提到将一个类声明名为bean的注解有哪些,其实用注解配置元数据还是非常简单的,就是在类上面加上注解就好了,如下

@Component
public class LuRenZhang{
    .......
}

除了在类上面直接加注解,还得在XML文件中定义下扫描包用于扫描注解定义的Bean,如下

<?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:context="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
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="dao" />

</beans>

然后就可以进行依赖注入了,通过@Autowired注解,如下

@Service
public class LuRenService{
    @Autowired //将上面定义的Bean注入
    private LuRenZhang luRenZhang;
    
    ......
}

基于Java类配置元数据

基于Java类配置元数据也很简单,需要两个注解,在类上标注@Configuration,标注这个注解的类表示其是作为Bean定义的来源,在类中的方法上标注@Bean定义Bean,如下

先写个User类

class User{
    private String name;
    private int age;
    public User(String name, int age){
        this.name = name;
        this.age = age;
    }
    public void print(){
        System.out.println("名字:"+ name + " 年龄:" + age);
    }
}

再写个Bean配置类

@Configuration
class BeanConfiguration {

    @Bean
    public User user(){
        return new User("路人张",18);
    }

}

通过AnnotationConfigApplicationContext实例化Spring容器,如下

class test{
    public static void main(String[] args) {
        ApplicationContext application = new AnnotationConfigApplicationContext(BeanConfiguration.class);
        User user= application.getBean(User.class);
        user.print();
    }
}

输出:

名字:路人张 年龄:18

也可以通过注解@Autowired注入

class School{
    @Autowired
    private User user;
//    .......
}

类比XML文件配置元数据,@Configuration相当于XML文件中的<beans></beans>,@Beanx相当于XML文件中的<bean/>,就好理解多了。


点击面试手册,获取本站面试手册PDF完整版