前言
纸上得来终觉浅,绝知此事要躬行。这两天看Spring框架、以及遇到的一些问题,加之自己的实操颇有感触,遂提笔记之。
IOC(控制反转)
简而言之就是本身由程序new出来的对象,交由Spring容器进行创建及管理降低类与类之间的耦合性,而且Spring创建的对象天然就是单例的,避免重复创造对象节省内存空间,下面我们来看看简单的实现步骤。
1.导入坐标
<!--导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
2.创建Dao、Service接口及其实现类
public interface BookDao {
public void save();
}
public class BookDaoImpl implements BookDao {
@Override
public void save() {
System.out.println("book dao save...");
}
}
public interface BookService {
public void save();
}
public class BookServiceImpl implements BookService {
private final BookDao bookDao = new BookDaoImpl();
@Override
public void save() {
System.out.println("book service save...");
bookDao.save();
}
}
3.创建配置文件
我们需要在resource目录下创建applicationContext.xml文件(名字可以随便起),配置BookDaoServciImpl的bean类
<?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="bookService" class="com.qmc.service.impl.BookServiceImpl">
</beans>
这里的id就是唯一标识符,class为要交由spring创建及托管类的全路径
4.编写测试方法
通过ClassPathXmlApplicationContext这个类读取解析配置文件从将配置文件中的类全部交由spring创建和托管
public class App {
public static void main(String[] args) {
ApplicationContext atx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookService = (BookServiceImpl)atx.getBean("bookService");
bookService.save();
}
}
执行结果
DI(依赖注入)
依赖注入的目的是消除BookServiceImpl中通过new创建的BookDao,将这一部也交由Spring进行管理,具体操作步骤如下:
1.删除BookServiceImpl中通过new创建的BookDaoImpl,并提供setter方法
public class BookServiceImpl implements BookService {
private BookDao bookDao;
@Override
public void save() {
System.out.println("book service save...");
bookDao.save();
}
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
}
2.修改配置文件
<?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="bookService" class="com.qmc.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"/>
</bean>
<bean id="bookDao" class="com.qmc.dao.impl.BookDaoImpl"/>
</beans>
这里name必须和setXX后面的一致,去掉set首字母小写,ref引用着这个bean的ID
3.测试
public class App {
public static void main(String[] args) {
ApplicationContext atx = new ClassPathXmlApplicationContext("applicationContext.xml");
BookService bookService = (BookServiceImpl)atx.getBean("bookService");
bookService.save();
}
}
执行结果
和上面的执行结果一样的,说明我们交由Spring创建BookDaoImpl依赖注入成功。
结尾
下一篇我们讲讲Spring自动装配那些事儿