Spring

淺唱寂寞╮ 提交于 2019-12-27 16:43:58

Day23 Spring

Spring概述

什么是spring

Spring就是一个轻量级DI(依赖注入)/IOC(控制反转)和AOP(面向切面)的框架

什么是框架

框架就是一个半成品,可以简单地把它理解成就是一个工具
通俗解释:就是把原有多行代码完成的功能,现在统一封装成一个类或者方法,直接调用即可

学习过的框架:Bootstrap(前端框架), DOM4J , Tomcat

轻量级

在java中如果说一个框架是重还是轻,其实就是讲这个技术好不好用

java发展时期比较重要的三个阶段:

  1. JAVASE阶段:主要做桌面应用软件的—>开发的界面太丑 AWT GUI
  2. JAVAEE阶段:主要做企业级应用管理软件—>EJB(重量级的企业级JAVABEAN)
  3. 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的步骤

  1. 导入jar包
    在这里插入图片描述

  2. 编写Spring的核心配置(由于spring是一个bean容器,所以需要告诉spring哪些类需要交给spring来管理)

    1. 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>
    
  3. 测试

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来接管测试功能:
在这里插入图片描述

步骤

  1. 导入jar包
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wV8qKhxt-1577426352369)(mdjs\img\spring测试jar包.png)]
  2. 测试代码
@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

三层架构的结构

三层架构的结构
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!