文章目录
Day23 Spring
Spring概述
什么是spring
Spring就是一个轻量级的DI(依赖注入)/IOC(控制反转)和AOP(面向切面)的框架
什么是框架
框架就是一个半成品,可以简单地把它理解成就是一个工具
通俗解释:就是把原有多行代码完成的功能,现在统一封装成一个类或者方法,直接调用即可
学习过的框架:Bootstrap(前端框架), DOM4J , Tomcat
轻量级
在java中如果说一个框架是重还是轻,其实就是讲这个技术好不好用
java发展时期比较重要的三个阶段:
- JAVASE阶段:主要做桌面应用软件的—>开发的界面太丑 AWT GUI
- JAVAEE阶段:主要做企业级应用管理软件—>EJB(重量级的企业级JAVABEAN)
- JAVAME阶段:主要是做嵌入式的软件—>NOKIA
EJB
特点:
- 功能强大,基本上无所不能
- 学习成本高
在JAVA快要没落的时候
Java的英雄出现了:Spring
他就是JAVA的春天,他做的事情,完全可以替代EJB
Spring核心
Spring两大核心:
- IOC【Inverse Of Control】控制反转/DI【Dependency Injection】
- 所谓控制反转就是把对象(bean)对象和维护对象(bean)之间的关系的权利转移到Sqring容器中去了(ApplicationContext.xml)而程序本身不在维护了
- 实际上DI和IOC是同一个概念,因为在ApplicationContext.xml配置文件中bean和bean之间通过ref来维护的时候是相互依赖的,所以又叫做依赖注入。也就是控制反转。
- AOP【面向切面】
- 面向切面编程,他可以对代码有效的解耦,并且可以对公共的业务逻辑代码进行抽取

- 面向切面编程,他可以对代码有效的解耦,并且可以对公共的业务逻辑代码进行抽取
Spring的模块化

Spring入门
使用Spring的步骤
-
导入jar包

-
编写Spring的核心配置(由于spring是一个bean容器,所以需要告诉spring哪些类需要交给spring来管理)
- applicationContext.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"> <!-- class:编写类的全限定名,表示交给了spring管理 id:简单理解就是该bean的名字 --> <bean id="mybean" class="cn.itsource._01ioc.MyBean"></bean> <!-- <bean id="mybean2" class="cn.itsource._01ioc.MyBean"></bean> --> </beans> -
测试
Spring获取对象
工厂获取对象的三种方式
方式一 根据id创建对象
//将资源文件转成resource对象
Resource resource = new ClassPathResource("applicationContext.xml");
System.out.println(resource);
//根据资源创建bean工厂
BeanFactory factory = new XmlBeanFactory(resource);
MyBean bean = (MyBean)factory.getBean("mybean");
System.out.println(bean);
方式二 根据类型创建对象
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
MyBean bean = beanFactory.getBean(MyBean.class);
System.out.println(bean);
方式三 通过id和类型一起匹配指定的bean
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
MyBean bean = beanFactory.getBean("mybean", MyBean.class);
System.out.println(bean);
方式四 使用ApplicationContext创建对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
MyBean bean = applicationContext.getBean("mybean",MyBean.class);
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">
<!--
class:编写类的全限定名,表示交给了spring管理
id:简单理解就是该bean的名字
-->
<bean id="mybean" class="cn.itsource._01ioc.MyBean"></bean>
<!-- <bean id="mybean2" class="cn.itsource._01ioc.MyBean"></bean> -->
</beans>
ApplicationContext和BeanFactory的区别
解释:都是接口,ApplicationContext是BeanFactory的子接口,拥有更多的功能与方法
重点:ApplicationContext是在启动容器创建上下文环境的时候就创建Bean对象(预先加载,迫切加载),而BeanFactory是在使用的时候才进行对象的创建(懒加载)
Spring scope 作用域
常用的就是两种
Spring 的生命周期
构造 -> 初始化->运行-> 销毁
Spring测试
传统方法的spring测试:
使用Spring框架测试由Spring来接管测试功能:
步骤
- 导入jar包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wV8qKhxt-1577426352369)(mdjs\img\spring测试jar包.png)] - 测试代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MainTest {
//自动注入
@Autowired
private OtherBean otherBean;
@Test
public void test01() {
System.out.println(otherBean);
}
}
加载Spring的配置文件
@ContextConfiguration(“bean.xml”) 默认加载当前包下的bean.xml文件
@ContextConfiguration(“classpath:bean.xml”) 加载当前src下的bean.xml文件
@ContextConfiguration("/bean.xml") 加载当前src下的bean.xml文件
@ContextConfiguration 加载当前测试类下的配置文件,文件命名必须是【类名-Context.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="otherBean" class="cn.itsource._06property_di.OtherBean"></bean>
<bean id="myBean" class="cn.itsource._06property_di.MyBean">
<!--
name:属性名
value:设置的是普通值(8大基本数据类型/8大包装类 String)
ref: 一般用于引用对象
-->
<property name="id" value="22"/>
<property name="age" value="3333"/>
<property name="otherBean" ref="otherBean"/>
</bean>
</beans>
配置连接池
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 加载db.properties文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- destroy-method="close":当连接池销毁的时候,要关闭连接池中所有的连接对象 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="url" value="${db.url}"/>
<property name="driverClassName" value="${db.driverClassName}"/>
</bean>
</beans>
db.properties:
db.username=root
db.password=root
db.url=jdbc:mysql:///test
db.driverClassName=com.mysql.jdbc.Driver
三层架构的结构
三层架构的结构
来源:CSDN
作者:此生只愿你笑靥如繁花
链接:https://blog.csdn.net/qq_40629521/article/details/103731049

