什么是Spring框架:Spring框架是一个开源的Java应用程序框架,旨在降低企业级应用程序开发的复杂性。它提供了一套全面的基础设施支持,包括控制反转(IoC)、依赖注入(DI)、AOP、数据访问、事务管理、Web应用程序开发等功能。Spring框架的设计理念是基于“简单、一致、高效”的原则,并具有高度可扩展性和灵活性,可以与其他开源技术和工具无缝集成。它已经成为了Java企业级应用程序开发的事实标准之一。
Ioc的概念:
IOC(Inversion of Control)即控制反转,是Spring框架的核心概念之一。传统的程序开发模式中,程序员通过new关键字创建对象、调用方法等来控制对象的生命周期和行为。而在IoC模式下,控制权由程序员转移到了容器中,由容器负责创建、管理和控制对象的生命周期和行为。
IoC的实现方式是依赖注入(Dependency Injection,简称DI),它通过注入对象依赖关系来解决类与类之间的耦合性,使得程序更加灵活、可扩展和易于维护。使用IoC和DI可以有效地降低代码的耦合度,提高代码的复用性和可测试性,从而提高开发效率和质量。
Di的概念:
DI(Dependency Injection),即依赖注入,是实现IoC的一种方式。它通过将对象之间的依赖关系交给外部容器来管理,从而降低对象之间的耦合度和提高代码的可维护性、可重用性和可测试性。
在DI中,程序员不再通过new关键字直接创建对象,而是通过构造函数、工厂方法或者属性注入等方式,由Spring容器负责创建相应的对象,并将其注入到需要它们的地方。这样做的好处是,对象之间的依赖关系被明确地声明出来,可以轻松地替换或者修改依赖关系,而不会影响到其他部分的代码。
Spring框架提供了多种注入方式,包括构造函数注入、Setter方法注入、字段注入等,可以根据实际情况选择合适的注入方式。
案例:
1、导入jar包
2、创建分层结构并书写接口与实现类
dao层
接口:
package com.liu.dao;
public interface BookDao {
void opp();
}
实现类:
package com.liu.dao;
public class BookDaoInpl implements BookDao{
@Override
public void opp() {
System.out.println("opp-------");
}
}
serivce层
接口:
package com.liu.serivce;
public interface BookSreivce {
void add();
}
impl层(实现类)
package com.liu.serivce.impl;
import com.liu.serivce.BookSreivce;
/**
* 该类为实现了"BookSreivce"接口的服务实现类
*/
public class BookSerivceImpl implements BookSreivce {
/**
* 实现了"BookSreivce"接口中定义的"add()"方法
*/
@Override
public void add() {
System.out.println("add----- impl");
}
}
package com.liu.serivce.impl;
import com.liu.dao.BookDao;
import com.liu.serivce.BookSreivce;
/**
* 该类实现了"BookSreivce"接口,用于对书籍进行添加等操作,
* 它引入了"BookDao",在"add()"方法中使用"bookDao"。
*/
public class BookSerivceVip implements BookSreivce {
/**
* 返回一个"BookDao"对象
* @return "BookDao"对象
*/
public BookDao getBookDao() {
return bookDao;
}
/**
* 设置"BookDao"对象
* @param bookDao 要设置的"BookDao"对象
*/
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
BookDao bookDao; // 声明一个"BookDao"类型的变量
/**
* 实现了"BookSreivce"接口中定义的"add()"方法,
*/
@Override
public void add() {
System.out.println("Vip--------add");
bookDao.opp();
}
}
3、配置核心配置文件
<?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">
<!-- 定义一个名为"bookDaoInpl"的bean -->
<bean id="bookDaoInpl" class="com.liu.dao.BookDaoInpl"/>
<!-- 定义一个名为"bookSerivce"的bean,并引用"bookDaoInpl" -->
<bean id="bookSerivce" class="com.liu.serivce.impl.BookSerivceVip">
<property name="bookDao" ref="bookDaoInpl"/>
</bean>
</beans>
4、servlet层(测试类)
package com.liu.servlet;
import com.liu.serivce.BookSreivce;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 该类用于测试"BookSreivce"
*/
public class Test01 {
BookSreivce bookSreivce; // 声明一个"BookSreivce"类型的变量
/**
* 测试方法,用于检测"BookSreivce"
*/
@Test
public void Test01(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); // 加载Spring配置文件
bookSreivce = (BookSreivce) context.getBean("bookSerivce"); // 获取"bookSerivce" bean
bookSreivce.add(); // 调用"add()"方法
}
}
测试结果:
当核心配置文件 bookSerivce的类指定为com.liu.serivce.impl.BookSerivceImpl时
当核心配置文件 bookSerivce的类指定为com.liu.serivce.impl.BookSerivceVip时