传统JAVAweb开发层与层之间太过紧密,new的对象太多。使用仓库会增强事务的功能,第三方增强。
IoC,DI和AOP思想的提出:
IoC思想:传统的第三方,需要自己创建Bean对象,需要使用的时候通过get,set方法调用,IoC思想为控制反转,Bean对象由第三方控制,需要使用的时候通过第三方去调用
DI思想:依赖注入,强调Bean之间的关系,由第三方负责
Aop思想:面向切面编程:功能的横向抽取,主要的实现方式是Proxy
软件的框架也是半成品,抽取为一个大概框架。基于基础技术之上,是一个半成品,使用大量的设计模式,算法,具备扩展性。
BaenFactory开发步骤:
1.导入Spring的jar包或maven坐标
2.编写UserService接口以及UserServiceImpl实现类
3.创建beans.xml文件,将UserServiceImpl的信息配置到该xml文件中。
4.编写测试代码,创建BeanFactory,加载配置文件,获取UserService实例对象
以下是实例代码:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>SpringTest</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.7</version> <!-- 使用适合你的 Spring 版本 -->
</dependency>
</dependencies>
</project>
<?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="userService" class="com.zzz.service.impl.UserServiceImpl">
</bean>
</beans>
package com.zzz.test;
import com.zzz.service.UserService;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;
import java.util.zip.Deflater;
public class BeanFactoryTest {
public static void main(String[] args) {
//创建工厂对象
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
//创建读取器
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
//将工厂与读取器绑定
reader.loadBeanDefinitions("beans.xml");
//根据id获取Bean实例对象
UserService userService =(UserService)beanFactory.getBean("userService");
System.out.println(userService);
}
}
以上可见,只需要在Beans.xml文件中配置bean文件就可以通过第三方工厂获取到bean文件
步骤汇总:
1.创建User接口类,创建实现对象
2.在beans.xml文件中将接口文件写入,配置bean文件
3.实例化测试,通过id查找输出。
在test测试文档中,,有以下几个步骤:
1.创建工厂对象:
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
2.创建读取器:
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
3.将工厂与读取器绑定:
reader.loadBeanDefinitions(“beans.xml”);
这是spring开发三板斧
接下来就可以通过id获取Bean实例对象:通过BeanFactory的getBean方法:
UserService userService =(UserService)beanFactory.getBean(“userService”);
类型通过Bean接口类进行强转。
打印的时候,还有一种方法,叫做注入:在实现类中写,可从BeanFactory中调用该方法:
public class UserServiceImpl implements UserService {
public void setUserDao(UserDao userDao) {
System.out.println(“这儿打印了”+userDao);
}
}
同时,需要在bean.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 id="userService" class="com.zzz.service.impl.UserServiceImpl">
<property name="userDao" ref="UserDao"><!--配置注入-->
</property>
</bean>
<!--配置UserDaoImpl-->
<bean id="UserDao" class="dao.UserDaoImpl">
</bean>
</beans>