【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框架导入
【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的加持下,我们需要下面这串代码,也就是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包中的类
然后在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垃圾回收期回收