IOC和DI入门

news/2024/12/13 2:51:15/

IOC入门案例【重点】

<bean>标签中id属性和class属性的作用是什么?

1.1 案例思路分析

  1. 管理什么?(Service与Dao)

  2. 如何将被管理的对象告知IOC容器?(配置文件)

  3. 被管理的对象交给IOC容器,如何获取到IoC容器?(接口)

  4. IOC容器得到后,如何从容器中获取bean?(接口方法)

  5. 使用Spring导入哪些坐标?(pom.xml)

1.2 实现步骤

1.导入Spring坐标

2.定义Spring管理的类(接口)

3.创建Spring配置文件,配置对应类作为Spring管理的bean对象

4.初始化IOC容器(Spring核心容器/Spring容器),通过容器获取bean对象

1.3 实现代码

【第一步】导入Spring坐标

<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管理的类(接口)

  • OrderDao 接口和OrderDaoImpl实现类

public interface OrderDao {public void save();
}public class OrderDaoImpl implements OrderDao {public void save() {System.out.println("order dao save ...");}
}
  • BookService接口和BookServiceImpl实现类

public interface OrderService {public void save();
}public class OrderServiceImpl implements BookService {private OrderDao orderkDao = new OrderDaoImpl();public void save() {System.out.println("order service save ...");orderDao.save();}
}

【第三步】创建Spring配置文件,配置对应类作为Spring管理的bean对象

  • 定义applicationContext.xml配置文件并配置OrderServiceImpl

<?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标签:表示配置beanid属性:表示给bean起名字class属性:表示给bean定义类型--><bean id="orderService" class="com.by.service.impl.OrderServiceImpl"></bean></beans>

==注意事项:bean定义时id属性在同一个上下文中(IOC容器中)不能重复==

【第四步】初始化IOC容器(Spring核心容器/Spring容器),通过容器获取Bean对象

public class App {public static void main(String[] args) {//1.创建IoC容器对象,加载spring核心配置文件ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");//2 从IOC容器中获取Bean对象(BookService对象)OrderService orderService= (BookService)ctx.getBean("orderService");//3 调用Bean对象(BookService对象)的方法orderService.save();}
}

1.4 运行结果

 

1.5spring相关API

1.5.1 ApplicationContext的继承体系

applicationContext:

接口类型,代表应用上下文,可以通过其实例获得 Spring 容器中的 Bean 对象

1.5.2 ApplicationContext的实现类

1)ClassPathXmlApplicationContext

它是从类的根路径下加载配置文件 推荐使用这种

2)FileSystemXmlApplicationContext

它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。

3)AnnotationConfigApplicationContext

当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解。

1.5.3 getBean()方法使用

public Object getBean(String name) throws BeansException {  assertBeanFactoryActive();   return getBeanFactory().getBean(name);
}
public <T> T getBean(Class<T> requiredType) throws BeansException {                     assertBeanFactoryActive();return getBeanFactory().getBean(requiredType);
}

其中,当参数的数据类型是字符串时,表示根据Bean的id从容器中获得Bean实例,返回是Object,需要强转。

当参数的数据类型是Class类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错

getBean()方法使用

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");UserService userService1 = (UserService) applicationContext.getBean("userService");UserService userService2 = applicationContext.getBean(UserService.class);

2. DI入门案例【重点】

<property>标签中name属性和ref属性的作用是什么?

2.1 DI入门案例思路分析

  1. 基于IOC管理bean

  2. Service中使用new形式创建的Dao对象是否保留?(否)

  3. Service中需要的Dao对象如何进入到Service中?(提供setter方法)

  4. Service与Dao间的关系如何描述?(配置)

2.2 实现步骤

1.删除使用new的形式创建对象的代码

2.提供依赖对象对应的setter方法

3.配置service与dao之间的关系

2.3 实现代码

【第一步】删除使用new的形式创建对象的代码

  public class OrderServiceImpl implements OrderService {//引入dao对象private OrderDao orderDao ; //【第一步】删除使用new的形式创建对象的代码@Overridepublic void add() {System.out.println("order service save ...");orderDao.save();}
}

【第二步】提供依赖对象对应的setter方法

public class OrderServiceImpl implements OrderService {//引入dao对象private OrderDao orderDao ;public void setOrderDao(OrderDao orderDao) {this.orderDao = orderDao;}
​@Overridepublic void add() {System.out.println("order service save ...");orderDao.save();}
}

【第三步】配置service与dao之间的关系

在applicationContext.xml中配置

<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标签:表示配置beanid属性:表示给bean起名字class属性:表示给bean定义类型--><bean id="orderDao" class="com.by.dao.impl.OrderDaoImpl"></bean><bean id="orderService" class="com.by.service.impl.OrderServiceImpl"><!--配置service和dao的关系property标签,表示配置当前bean的属性name属性:指代引用哪一个属性ref属性:表示参照哪一个id--><property name="orderDao" ref="orderDao"/></bean>
</beans>

2.4 图解演示

 


http://www.ppmy.cn/news/618493.html

相关文章

bbs纪录片

上百部BBC经典纪录片在线 2011-10-28 19:53:57 对于纪录片爱好者来说&#xff0c;追BBC&#xff08;英国广播公司&#xff09;题材广泛、制作精良的纪录片是人生一大乐事。看BBC的纪录片&#xff0c;既可以追溯上下数千年的历史文化&#xff0c;也可以欣赏从宇宙到地信深处的奇…

哪些单机游戏最好玩,我们来总给一下.

要问到什么单机游戏最好玩,乐牛小编认为,这个要根据个人喜好的游戏类型来定义...... 如果你爱玩奇幻类的单机游戏&#xff0c;乐牛小编给您推荐《上古卷轴4》、《无冬之夜2》、《神鬼寓言之失落之章》&#xff0c;这几款单机游戏自由度比较高&#xff0c;而且魔法效果很好很强…

[转载]上百部BBC经典纪录片在线欣赏

对于纪录片爱好者来说&#xff0c;追BBC&#xff08;英国广播公司&#xff0c;比较权威的高知名度的媒体&#xff09;题材广泛、制作精良的纪录片是人生一大乐事。看BBC的纪录片&#xff0c;既可以追溯上下数千年的历史文化&#xff0c;也可以欣赏从宇宙到地信深处的奇妙境界&a…

DirectX学习笔记(十五):粒子系统实现

本系列文章由zhmxy555&#xff08;毛星云&#xff09;编写&#xff0c;转载请注明出处。 文章链接&#xff1a;http://blog.csdn.net/zhmxy555/article/details/8744805 作者&#xff1a;毛星云&#xff08;浅墨&#xff09; 邮箱&#xff1a; happylifemxy163.com 本篇文…

三维粒子系统的实现

本篇文章中&#xff0c;我们将一起探讨三维游戏中粒子系统的方方面面&#xff0c;首先对粒子系统的基本概念特性做一个全面的认知&#xff0c;然后我们依旧是把粒子系统封装在一个C类中&#xff0c;模拟了三维游戏中唯美的雪花飞扬的景象&#xff0c;让我们之前的综合三维游戏场…

unity3D的面试题

第一部分 1.请简述值类型与引用类型的区别 2.C#中所有引用类型的基类是什么 3.请简述ArrayList和List<Int>的主要区别 4.请简述GC&#xff08;垃圾回收&#xff09;产生的原因&#xff0c;并描述如何避免&#xff1f; 5.请描述Interface与抽象类之间的不同 6.下列代码在运…

数学史海览胜

2019独角兽企业重金招聘Python工程师标准>>> 数学史海览胜 ——卢介景 第一章 三个发展时期 1、初等数学时期 2、变量数学时期 3、现代数学时期 第二章 三项世界记录 1、数学史最长的国家 2、数学传统最悠久的国家 3、数学教育开始最早的国家 第三章 三…

游戏体验及理解分析

游戏设计中的心理 0.马斯洛需要层次理论&#xff1a; 游戏本身是一个虚拟世界&#xff0c;在这个世界中&#xff0c;是一个玩家行为的奖惩系统&#xff0c;通过这个系统来满足玩家的需求&#xff0c;其需求就是马斯洛提出的5种需要层次。 此外&#xff1a; 单机的游戏设计是…