SpringBoot实战教程-回顾Spring的Java配置方式

本文介绍了Spring注解驱动的发展历程,从Spring1.x时代的XML配置,到Spring2.x、3.x、4.x和5.x的注解增强,强调了Java配置方式在Spring4.x后的流行。通过一个示例展示了如何使用Java配置创建Spring应用,包括核心注解的使用,表明了SpringBoot之前的Spring就已经支持全注解开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仅需 订阅专栏合集,作者所有专栏都能看

导读

  纯Java代码配置方式是Spring4.x推荐的配置方式,可以完全替代xml配置。因此注解式开发不是SpringBoot才有的,而是早已有之,只是SpringBoot带动了全注解式开发浪潮。本节追本溯源,温习一下Spring的Java配置方式。下一节正式进入SpringBoot实战技术讲解。

Spring注解驱动的发展

0.1.1、Spring1.x 时代

  在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断演进,需要将xml配置拆分到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。
虽然Spring1.2.0已经提供了@ManagedResource@Transactional等注解,但是被注解修饰的Bean的装配仍然采用XML配置方式。

0.1.2、Spring2.x时代

  随着JDK 1.5的出炉,业界刮起了使用注解的浪潮,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。这个时期引入了一些核心的注解。

  • 依赖注入 @Autowired
  • 依赖查找 @Qualifier
  • 组件声明 @Component、@Service
  • SpringMVC注解 @Controller、@RequestMapping

尽管这个阶段增加了不少注解,但是仍需XML配置驱动,即<context:annotation-config><context:component-scan>

0.1.3、Spring3.x到Spring4.x

  从Spring3.x开始提供了Java配置方式,陆续引入了配置类注解@Configuration、替代<context:component-scan>@ComponentScan、声明组件的@Bean等。
Spring4.x开始又提供了更加完善的注解驱动能力,引入了@Conditional等条件注解,使得自动装配如鱼得水。

0.1.4、Spring5.x时代

  我们就处于这个时代,从Spring4.x开始,java配置的方式就开始流行起来,使用Java配置方式可以更好地从代码层面理解应用的上下文关系。

Spring的Java配置方式

0.2.1、核心注解

Spring的Java配置方式是通过 @Configuration@Bean 这两个注解实现:

  • @Configuration 作用于类上,相当于一个xml配置文件
  • @Bean 作用于方法上,相当于xml配置中的 < bean >

0.2.2、Java配置示例

  该示例演示了通过Java配置的方式构建Spring应用,并且实现了Spring IOC功能。注意,本例只是普通maven工程而非SpringBoot应用。

创建传统Maven工程

pom.xml

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.2.RELEASE</version>
  </dependency>
</dependencies>
编写User对象

org.example.model.User

public class User {
    private String userName;
    private String password;
    private Integer age;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}
编写UserDAO模拟与数据库交互

org.example.dao.UserDAO

public class UserDAO {
    public List<User> queryUserList() {
        List<User> result = new ArrayList<User>();
        // 模拟数据库的查询
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUserName("userName_" + i);
            user.setPassword("password_" + i);
            user.setAge(i + 10);
            result.add(user);
        }
        return result;
    }
}
编写UserService实现业务逻辑

org.example.service.UserService

@Service
public class UserService {
    @Autowired
    private UserDAO userDAO;

    public List<User> queryUserList() {
        return userDAO.queryUserList();
    }
}
编写SpringConfig 用于实例化Spring容器

org.example.config.SpringConfig

@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "org.example") //配置扫描包
public class SpringConfig {
    @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    public UserDAO getUserDAO() {
        return new UserDAO();
    }
}
启动Spring容器测试

org.example.App

public class App {
    public static void main(String[] args) {
        // 通过Java配置来实例化Spring容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        // 在Spring容器中获取Bean对象
        UserService userService = context.getBean(UserService.class);
        // 调用对象中的方法
        List<User> list = userService.queryUserList();
        for (User user : list) {
            System.out.println(user.getUserName() + ", " + user.getPassword() + ", " + user.getPassword());
        }
        // 销毁该容器
        context.close();
    }
}
运行结果

在这里插入图片描述
从以上的示例中可以看出,使用纯Java代码就完美地替代了xml配置文件,并且结构更加的清晰。我们没有引入任何SpringBoot相关的依赖,这充分说明了注解驱动开发在SpringBoot之前就有了。

本章小结

  本章带领大家回顾了一下spring注解发展史,并结合一个例子展示了Spring的纯Java的配置方式。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程猿薇茑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值