1 IOC入门案例【重点】
第一步:依赖
<dependencies>
<!--导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
第二步:定义Spring管理的接口
BookController接口和BookControllerImpl实现类
package com.controller;
public interface BookController {
void save();
}
package com.controller;
public class BookControllerImpl implements BookController{
@Override
public void save() {
System.out.println("BookControllerImpl");
}
}
BookService接口和BookServiceImpl实现类
package com.service;
public interface BookService {
void show();
}
package com.service;
import com.controller.BookController;
import com.controller.BookControllerImpl;
public class BookServiceImpl implements BookService{
private BookController bookController = new BookControllerImpl();
@Override
public void show() {
bookController.save();
System.out.println("BookServiceImpl");
}
}
第三步:配置Spring文件
<?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标签:表示配置bean
id属性:表示给bean起名字
class属性:表示给bean定义类型
-->
<bean class="com.service.BookServiceImpl" id="bookService"/>
</beans>
第四步:测试
package com;
import com.controller.OrderDao;
import com.controller.StudentController;
import com.controller.UserDao;
import com.service.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringTest {
@Test
public void demo1(){
//1.创建IoC容器对象加载spring核心配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 从IOC容器中获取Bean对象(BookService对象)
BookService bookService = (BookService) context.getBean("bookService");
//3 调用Bean对象(BookService对象)的方法
bookService.show();
}
}
2 DI入门案例【重点】
第一步:定义Spring管理的接口
BookController接口和BookControllerImpl实现类
package com.controller;
public interface BookController {
void save();
}
package com.controller;
public class BookControllerImpl implements BookController{
@Override
public void save() {
System.out.println("BookControllerImpl");
}
}
BookService接口和BookServiceImpl实现类
package com.service;
public interface BookService {
void show();
}
package com.service;
import com.controller.BookController;
import com.controller.BookControllerImpl;
public class BookServiceImpl implements BookService{
private BookController bookController;
//【第一步】删除使用new的形式创建对象的代码
@Override
public void show() {
bookController.save();
System.out.println("BookServiceImpl");
}
//【第二步】提供依赖对象对应的setter方法
public void setBookController(BookController bookController) {
this.bookController = bookController;
}
}
第二步:配置Spring文件
<?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 class="com.controller.BookControllerImpl" id="bookController"/>
<bean class="com.service.BookServiceImpl" id="bookService">
<!--配置service与dao的关系
property标签:表示配置当前bean的属性
name属性:表示配置哪一个具体的属性,注意: 这里的name并不是属性,而是set方法后面的
ref属性:表示参照哪一个bean,引用另外一个bean , 不是用value 而是用 ref
ref:引用Spring容器中创建好的对象
value:具体的值,基本数据类型!
-->
<property name="bookController" ref="bookController"/>
</bean>
</beans>
第三步:测试
@Test
public void demo2(){
//1.创建IoC容器对象加载spring核心配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 从IOC容器中获取Bean对象(BookService对象)
BookService bookService = (BookService) context.getBean("bookService");
//3 调用Bean对象(BookService对象)的方法
bookService.show();
}
3 bean的实例化
法一:构造方法方式【重点】
StudentController接口和StudentControllerImpl
package com.controller;
public interface StudentController {
void save();
}
package com.controller;
public class StudentControllerImpl implements StudentController{
public StudentControllerImpl() {
}
@Override
public void save() {
System.out.println("StudentControllerImpl");
}
}
beans.xml文件
<?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-->
<bean class="com.controller.StudentControllerImpl" id="studentController"/>
</beans>
测试
@Test
public void demo3(){
//1.创建IoC容器对象加载spring核心配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//2 从IOC容器中获取Bean对象
StudentController studentController = context.getBean("studentController", StudentController.class);
//3 调用Bean对象的方法
studentController.save();
}
法二:静态工厂方式
OrderDao接口和OrderDaoImpl实现类
package com.controller;
public interface OrderDao {
void save();
}
package com.controller;
public class OrderDaoImpl implements OrderDao{
@Override
public void save() {
System.out.println("OrderDaoImpl");
}
}
OrderDaoFatory工厂类
package com.controller;
public class OrderDaoFactory {
//静态工厂创建对象
public static OrderDao getOrderDao(){
System.out.println("静态工厂执行了");
return new OrderDaoImpl();
}
}
deans.xml文件
<?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-->
<bean class="com.controller.OrderDaoFactory" id="orderDaoFactory" factory-method="getOrderDao"/>
</beans>
测试
@Test
public void demo4(){
//1.创建IoC容器对象加载spring核心配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//2 从IOC容器中获取Bean对象
OrderDao orderDaoFactory = context.getBean("orderDaoFactory", OrderDao.class);
//3 调用Bean对象的方法
orderDaoFactory.save();
}
法三:实例工厂方式
UserDao接口和UserDaoImpl实现类
package com.controller;
public interface UserDao {
void show();
}
package com.controller;
public class UserDaoImpl implements UserDao{
@Override
public void show() {
System.out.println("UserDaoImpl");
}
}
UserDaoFactory工厂类
package com.controller;
public class UserDaoFactory {
//实例工厂创建对象
public UserDao getUserDao(){
System.out.println("实例工厂执行了");
return new UserDaoImpl();
}
}
beans.xml文件
<?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-->
<bean class="com.controller.UserDaoFactory" id="userDaoFactory"/>
<bean factory-bean="userDaoFactory" factory-method="getUserDao" id="userDao"/>
</beans>
测试
@Test
public void demo5(){
//1.创建IoC容器对象加载spring核心配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//2 从IOC容器中获取Bean对象
UserDao userDao = context.getBean("userDao", UserDao.class);
//3 调用Bean对象的方法
userDao.show();
}