spring崇尚:不重复的造轮子
工厂设计模式:工厂生产对象(配置文件properties+反射)
Spring创建对象的实现原理:
根据配置文件的id得到对应的class属性值,根据反射,通过类全路径创建对象;
通过配置文件,通过工厂设计模式,有反射动态创建对象
具体步骤为:
1 创建一个小配置文件a1.properties、放在src下
key=value
username=hr
password=hr
2 利用流读取小配置文件
InputStream is = Xxx.class.getResourceAsStream(“/a1.properties”);
3 创建Properties的对象,加载读取的输入流
Properties pro = new Properties();
pro.load(is)
1.4 根据key获取value
String value = pro.getProperty(“username”);
Spring 框架就利用工厂设计模式对Service和DAO进行解耦合
何为工厂:创建管理对象的容器
思路:将对象的创建交给工厂完成,工厂读取小配置文件,获取要创建对象的全限定名,利用反射创建类的对象并发返回给调用者
-
编写小配置文件,存放需要由工厂创建对象的全限定名
-
创建一个类BeanFactory (对象工厂,工厂设计模式的核心类)
bean(对象) Factory(工厂)
1.1 使用静态代码块加载读取小配置文件
1.2 创建一个方法创建开发者需要的对象
如下图所示:
- 在业务逻辑层中,将自己创建对象的代码删掉,交给工厂创建
如此,就把我们的Service和Dao进行了解耦合,使得Dao实现类的创建不再在程序中创建,而是通过读取配置文件来创建。这样的解耦合使得程序更灵活,
1.1 添加jar包,
搭建一个基础的Spring环境所需要的最基础的jar包有以下几个:
1.2 添加配置文件applicationContext.xml,放在src下
1.3 配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/bean
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89JdcYon-1670239903517)(https://mmbiz.qpic.cn/mmbiz_png/nMicohCxH9r2BPjylgQTOxQFBMTBcucNMZpohd3FpUkGsDf2wzGZa3cjx7icEg6dCMg15vGibA9Q8C21s6CdL6K0g/0?wx_fmt=png)]
s"
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">
1.4 创建spring工厂,获取对象
import com.macw.entity.Person;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test1 {
public static void main(String[] args) {
//需求:获取Person这个类的对象
//1.创建spring工厂 参数:写appliactionContext.xml文件的路径
//classpath(类路径): src就是classpath路径的根
ClassPathXmlApplicationContext ac =
new ClassPathXmlApplicationContext(“classpath:applicationContext.xml”);
//2.从spring工厂中获取Person类的对象
//参数:bean标签的id
Person person = (Person) ac.getBean(“p1”);
System.out.println(person);
}
时机:什么时候创建这个类的对象?
次数:它是单例还是多例?
bean标签有一个属性:
System.out.println(person);
}
时机:什么时候创建这个类的对象?
次数:它是单例还是多例?
bean标签有一个属性: