• 中文
    • 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
  • 2k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: