Spring入门(一):创建Spring项目

清疚 2024-04-17 06:04 187阅读 0赞

本篇博客作为Spring入门系列的第一篇博客,不会讲解什么是Spring以及Spring的发展史这些太理论的东西,主要讲解下如何使用IntelliJ IDEA创建Spring项目以及通过一个示例了解下Spring的简单使用。

1. 创建Spring项目

首先,按照下图所示打开“新建项目”弹出框:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p3d2hubHk_size_16_color_FFFFFF_t_70

然后在左侧选择项目类型Spring:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p3d2hubHk_size_16_color_FFFFFF_t_70 1

如果这里忘记了选择”Create empty spring-config.xml”,也可以新建完项目再新建配置文件。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p3d2hubHk_size_16_color_FFFFFF_t_70 2

20190826102007147.png

接着,确定好项目名称和保存路径,然后点击”Finish”按钮:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p3d2hubHk_size_16_color_FFFFFF_t_70 3

因为需要下载Spring依赖的包,因此需要加载一会。

20190826102007638.png

新建完的项目结构图如下所示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p3d2hubHk_size_16_color_FFFFFF_t_70 4

2. Spring示例

新建一个Book类,定义两个字段bookName,author和一个实例方法printBookInfo()

  1. public class Book {
  2. private String bookName;
  3. private String author;
  4. public String getBookName() {
  5. return bookName;
  6. }
  7. public void setBookName(String bookName) {
  8. this.bookName = bookName;
  9. }
  10. public String getAuthor() {
  11. return author;
  12. }
  13. public void setAuthor(String author) {
  14. this.author = author;
  15. }
  16. public void printBookInfo() {
  17. System.out.println("Book Name:" + this.bookName + ",Author:" + this.author);
  18. }
  19. }

如果我们想要输出图书信息,按照传统的方式,需要以下几步:

  1. 创建Book类的实例对象
  2. 设置实例对象的bookName字段和author字段
  3. 调用实例对象的printBookInfo()方法

    public class Main {

    1. public static void main(String[] args) {
    2. Book book = new Book();
    3. book.setBookName("平凡的世界");
    4. book.setAuthor("路遥");
    5. book.printBookInfo();
    6. }

    }

运行结果:

Book Name:平凡的世界,Author:路遥

那么在Spring项目中,如何实现同样的调用呢?

首先,修改spring-config.xml,添加如下配置:

  1. <bean id="book" class="Book">
  2. <property name="bookName" value="平凡的世界"/>
  3. <property name="author" value="路遥"/>
  4. </bean>

然后修改Main的方法为:

  1. import org.springframework.context.ApplicationContext;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Main {
  4. public static void main(String[] args) {
  5. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
  6. Book book = applicationContext.getBean("book", Book.class);
  7. book.printBookInfo();
  8. }
  9. }

运行结果:

20190826102008151.png

我们会发现,运行结果和传统方式一样,只是多了一些Spring的日志信息。

在上面的代码中,我们并未使用new运算符来创建Book类的实例,但是却可以得到Book类的实例,这就是Spring的强大之处,所有类的实例的创建都不需要应用程序自己创建,而是交给Spring容器来创建及管理。

3. Spring示例讲解

虽说实例的创建交给Spring容器来创建及管理,但是在上述的代码中,什么时候创建了Book类的实例并对字段赋值了呢?

为验证这个疑问,我们修改下Book类。

  1. public class Book {
  2. private String bookName;
  3. private String author;
  4. public Book(){
  5. System.out.println("This is Book constructor.");
  6. }
  7. public String getBookName() {
  8. return bookName;
  9. }
  10. public void setBookName(String bookName) {
  11. System.out.println("This is Book setBookName().");
  12. this.bookName = bookName;
  13. }
  14. public String getAuthor() {
  15. return author;
  16. }
  17. public void setAuthor(String author) {
  18. System.out.println("This is Book setAuthor().");
  19. this.author = author;
  20. }
  21. public void printBookInfo() {
  22. System.out.println("Book Name:" + this.bookName + ",Author:" + this.author);
  23. }
  24. }

再添加一个Author类:

  1. public class Author {
  2. private String name;
  3. private int age;
  4. public Author() {
  5. System.out.println("This is Author constructor.");
  6. }
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. System.out.println("This is Author setName().");
  12. this.name = name;
  13. }
  14. public int getAge() {
  15. return age;
  16. }
  17. public void setAge(int age) {
  18. System.out.println("This is Author setAge().");
  19. this.age = age;
  20. }
  21. public void printAuthorInfo() {
  22. System.out.println("Name:" + this.name + ",Age:" + this.age);
  23. }
  24. }

然后修改下spring-config.xml文件。

  1. <bean id="book" class="Book">
  2. <property name="bookName" value="平凡的世界"/>
  3. <property name="author" value="路遥"/>
  4. </bean>
  5. <bean id="author" class="Author">
  6. <property name="name" value="路遥"/>
  7. <property name="age" value="60"/>
  8. </bean>

最后,我们修改下Main类的代码来Debug下,看下代码的执行顺序。

  1. import org.springframework.context.ApplicationContext;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Main {
  4. public static void main(String[] args) {
  5. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
  6. Book book = applicationContext.getBean("book", Book.class);
  7. book.printBookInfo();
  8. Author author = applicationContext.getBean("author", Author.class);
  9. author.printAuthorInfo();
  10. }
  11. }

为更直观的展示,请看如下的Gif图。

20190826102012433.gif

从图中,我们可以看出,在执行完 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");后,控制台先输出了以下内容:

This is Book constructor.

This is Book setBookName().

This is Book setAuthor().

This is Author constructor.

This is Author setName().

This is Author setAge().

也就是这句代码执行完后,Book类和Author类的实例已经被创建并且字段已经被赋值,接下来的代码只是从Spring容器中获取实例而已。

4. 注意事项

获取Bean时,第一个参数beanName要与spring-config.xml定义的bean id保持一致,比如我们在spring-config.xml中定义的是book,如果在获取时写的是Book,就会报错。

  1. import org.springframework.context.ApplicationContext;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Main {
  4. public static void main(String[] args) {
  5. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
  6. // 错误的beanName
  7. Book book = applicationContext.getBean("Book", Book.class);
  8. book.printBookInfo();
  9. }
  10. }

报错信息如下所示:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p3d2hubHk_size_16_color_FFFFFF_t_70 5

5. 源码及参考

源码地址:https://github.com/zwwhnly/spring-action.git,欢迎下载。

【Spring】IntelliJ IDEA搭建Spring环境

idea中Spring项目创建以及实现一个小的IoC案

原创不易,如果觉得文章能学到东西的话,欢迎点个赞、评个论、关个注,这是我坚持写作的最大动力。
如果有兴趣,欢迎添加我的微信:**zwwhnly**,等你来聊技术、职场、工作等话题(PS:我是一名奋斗在上海的程序员)。

发表评论

表情:
评论列表 (有 0 条评论,187人围观)

还没有评论,来说两句吧...

相关阅读