一. 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文件:
其中:
-
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); } }
请登录之后再进行评论