• 中文
    • English
  • 注册
  • 查看作者
    • Spring:简单使用

      一.  Spring简介

      我们接下来的Spring笔记是基于Spring的最新版本Spring5.1.8,该版本要求Java的JDK版本为8以上,Tomcat版本为8.5以上,关于Spriing的更多简介可以查看:Spring 概述 和  SPRING系列教材 (一)- 教程

      二. 添加依赖

      目前我们一共需要用到以下依赖:

      • commons-logging-1.2.jar (Mybatis依赖)

      • spring-beans-5.1.8.RELEASE.jar (Spring依赖)

      • spring-context-5.1.8.RELEASE.jar (Spring依赖)

      • spring-core-5.1.8.RELEASE.jar (Spring依赖)

      • spring-expression-5.1.8.RELEASE.jar (Spring依赖)

      接下来创建一个实体类:

      package io.zhangjia.entity;
      
      public class Book  {
          private Integer bookId;
          private String name;
          private String author;
          private Double price;
      
          public Integer getBookId() {
              return bookId;
          }
      
          public void setBookId(Integer bookId) {
              this.bookId = bookId;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getAuthor() {
              return author;
          }
      
          public void setAuthor(String author) {
              this.author = author;
          }
      
          public Double getPrice() {
              return price;
          }
      
          public void setPrice(Double price) {
              this.price = price;
          }
      
          @Override
          public String toString() {
              return "Book{" +
                      "bookId=" + bookId +
                      ", name='" + name + '\'' +
                      ", author='" + author + '\'' +
                      ", price=" + price +
                      '}';
          }
      }

      三.  applicationContext.xml

      创建并配置applicationContext.xml,IDEA可以直接创建该类型的xml文件:

      Spring:简单使用

      其中:

      • id可以理解为实例名

      • class就是Book类的全类名

      • property name就是Book类的属性名

      • value就是属性名对应的值

      <?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">
          <bean id="book" class="io.zhangjia.entity.Book">
              <property name="bookId" value="2" />
              <property name="name" value="Spring开发" />
              <property name="price" value="19.9" />
              <property name="author" value="张三" />
          </bean>
      </beans>

      上面的bean标签的实现原理如下:

      package io.zhangjia.test;
      
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import java.lang.reflect.Field;
      import java.lang.reflect.Method;
      
      public class Test2 {
          public static void main(String[] args) throws Exception {
              ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
              Object book = context.getBean("book");
      
              //通过反射调用无参构造方法创建对象,调用set方法进行赋值
              Class<?> aClass = Class.forName("io.zhangjia.entity.Book");
              Object o = aClass.newInstance();
              Field[] fields = aClass.getDeclaredFields();
              Object[] values = new Object[] {2,"Spring开发","张三",19.9};
              for (int i = 0; i < fields.length; i++) {
                  Field f = fields[i];
                  String name = f.getName();
                  Class<?> type = f.getType();
      //            拼接set方法名
                  String set = "set" + name.substring(0,1).toUpperCase() + name.substring(1);
      //            根据方法名以及方法参数类型获取方法
                  Method method = aClass.getMethod(set, type);
      //            执行set方法
                  method.invoke(o,values[i]);
      
      
              }
              System.out.println("o = " + o);
          }
      }

      也就是说,Spring通过反射调用无参构造方法创建对象,使用set方法对对象进行赋值

      四.  测试类

      package io.zhangjia.test;
      
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class Test {
          public static void main(String[] args) {
      //        初始化Spring的IOC容器
              ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
      //        根据id获取bean
              Object book = context.getBean("book");
              System.out.println("book = " + book);
          }
      }
      输出:
      book = Book{bookId=2, name='Spring开发', author='张三', price=19.9}

      getBean除了可以使用字符串来获取bean,还有以下两种常用的方式:

      public class Test2 {
          public static void main(String[] args) {
      //        初始化Spring的IOC容器
              ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
      //        根据Class获取Bean,但是必须保证bean,唯一此时结果不再是Object
              Book book = context.getBean(Book.class);
      //        根据id和Class获取Bean,此时bean可以不唯一,而且结果不再是Object
              Book book2 = context.getBean("book", Book.class);
              Book book3 = context.getBean("book2", Book.class);
          }
      }

    • 0
    • 0
    • 0
    • 1.6k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: