【1】Spring是什么

Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以IOC(inverse of control)反转控制和AOP(Aspect Oriented Programing)面向切面编程为内核。提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术。

【2】IOC的作用

        把我们之前学习的FactoryBean工厂类中的内容,全权交给Spring处理,降低程序之间的耦合

        控制反转就是把创建对象的权力,交给Spring框架

【3】代码练习

        【1】首先我们需要把Spring框架导入

        

spring quarz 周一 spring holiday._spring

         【2】其次我们需要创建一个bean.xml配置文件,这个文件中写上我们的约束

/spring-framework-5.0.2.RELEASE/docs/spring-framework-reference/html5/core.html

         【3】然后在bean.xml中写上一串代码

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl">
</bean>

           这个代码中id随便起,class中就是我们想要让Spring代创建的实现类

          【4】在模拟前端页面的类中,写上调用接口的实现类。

                

spring quarz 周一 spring holiday._spring_02

                在,没有Spring的加持下,我们需要下面这串代码,也就是new出来我们的对象,这样就提高的代码的耦合程度

IAccountService as=new AccountServiceImpl();

                但是有了Spring框架,我们只需要这三串代码即可

1 ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
2 IAccountService accountService = (IAccountService) ac.getBean("accountService");
3 accountService.saveAccount();

                第一串代码是获取核心容器对象,把我们写好的bean.xml传入

                第二串代码,是获取xml文件中的bean,参数就填我们写的bean的id,得到的对象就是我们class中写的对象,或者是它的父类。

                第三串代码,就是调用实现类中的方法了。

        【5】这里注意 ApplicationContext拥有三种实现类

                第二种是


        ApplicationContext ac=new FileSystemXmlApplicationContext(“”)


                这个方法是把我们电脑磁盘上的xml文件传入,不推荐

                第三种方法是


        new AnnotationConfigApplicationContext;


                它是用于注解创建核心容器的,将在day02中描述

        【6】除了ApplicationContext接口,还有一个BeanFactory接口也可以创建核心容器

                 这个接口是用于多例对象的,但是Spring框架已经为我们考虑好了

                 ApplicationContext会根据情况自动转换多例还是单例,所以BeanFactory用的不多。

        【7】介绍下咱们的bean标签的三种创建方式

                1.其中一种就是默认构造函数创建

                   在Spring配置中,bean配以id和Class属性后,没有其他任何的属性标签时,用bean的默认构造函数创建bean对象,此时,我们就要保证,我们想要创建的实现类中,需要拥有空参构造函数才可以。

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>

              2.第二种bean方法是使用普通工程类中的方法创建对象(使用某个类中的方法创建对象,并且存入Spring容器中),这种方法主要应用在,当我们需要使用jar包中的类时,这是他是class文件,我们不方便去修改它,我们就需要这种方法来获取其中的某个返回值。

首先创建一个模拟在jar包中的类               

spring quarz 周一 spring holiday._spring quarz 周一_03

                 然后在bean.xml中写上一下代码,调用的话和前面所说的一样,利用ApplicationContext

第一个bean中的id随便填,class,就填我们模拟jar包中的类
<bean id="factory" class="com.itheima.factory.Factory"></bean>
<!--
这个id随便,factory-bean是需要转成对象的,factory-bean就是我们上面这个bean的id
factory-method就是我们模拟类中的方法名称
-->
<bean id="accountService" factory-bean="factory" factory-method="as"></bean>

                3.第三种方法就是使用某个类中的静态方法创建对象,和第二种创建bean方法就差个静态。而且比第二种方法更加简洁

<bean id="accountService" class="com.itheima.factory.StaticFactory" 
factory-method="as"></bean>

         【8】bean创建处对象的单例和多例


        单例对象          出生:当容器创建时,对象出生         活着:只要容器在,对象一直在          死了:容器销毁,对象消亡         多例对象          出生:当我们使用对象时,才会创建容器          或者:对象只要在使用过程中,就一直活着          死了:当对象长时间不用,且没有别的对象引用时,由java垃圾回收期回收