目录
4.BeanFactory和ApplicationContext的区别
1.何为spring
Spring框架是一个开放源代码的J2EE应用程序框架,是针对bean的生命周期进行管理的轻量级容器。
特点:
1. 能帮我们低侵入/低耦合地根据配置文件创建及组装对象之间的依赖关系 //解耦
2. 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制等 //提高代码重用性
3.能非常简单的且强大的声明式事务管理 //使用xml或注解的方法,底层用到动态代理
4. 提供了与第三方数据访问框架(如JPA)无缝集成,且自己也提供了一套JDBC模板来方便数据库访问
5.提供与第三方Web框架无缝集成,且自己也提供了一套 SpringMVC 框架,来方便 Web 层搭建
为何使用spring:
降低耦合:对象与对象之间的耦合。
2.Spring Ioc
1.控制反转,是一种设计思想,就是原本在程序中需要手动创建对象的权利,交给spring框架管理
2.Ioc容器是实现Ioc的载体,Ioc容器实际上就是个Map(key,value),map中存放各种对象
3.Ioc容器就像一个工厂一样,当我们需要创建一个对象时,只需要配置好配置文件或贴注解即可,
完全不用考虑对象时如何被创建出来的
4.将对象相互依赖的关系交给ioc容器管理,这样可以很大程度简化应用开发
5.使用Ioc的话,我们只需要配置好,在需要的地方引用就好,这大大的增加了项目的可维护性且降低了开发难度
6.使用对象的时候不再是我们直接new,而是将创建对象的权利交给框架中的核心容器IOC,需要使用对象的时候直接从容器中获取
3.如何使用spring
3.1 引入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
</dependencies>
3.2 创建Spring的配置文件
<?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">
<!--表示一个类交于spring容器来创建
id:bean的唯一标识。
class: 类的全路径
-->
<bean id="userDao" class="com.qy151wd.UserDao01"/>
</beans>
3.3 创建一个Dao类
public interface IUserDao {
public void show();
}
public class UserDao implements IUserDao{
public void show(){
System.out.println("************************");
}
}
3.4 测试
public class UserTest {
public static void main(String[] args) {
//读取spring配置文件
ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
//获取bean对象 userDao对应的ID名
IUserDao userDao = (IUserDao) app.getBean("userDao");
userDao.show();
}
}
4.BeanFactory和ApplicationContext的区别
1.两者来自不同的包。
org.springframework.beans.factory.BeanFactory
org.springframework.context.ApplicationContext
2.BeanFactory 和ApplicationContext都是属于Spring 下的顶级接口,其中 BeanFactory 提供了基础的访问容器的能力,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖; ApplicationContext 属于BeanFactory 的子类,BeanFactory 所有的功能ApplicationContext 也是拥有,除此之外ApplicationContext还有用其他BeanFactory没有的功能,扩展的新功能如下:提供国际化的支持资源访问,如URL和文件 事件传递载入多个配置文件等 实现类常见有三个 。
3.单例模式下创建对象的时间点不一样:
ApplicationContext:(饿汉模式)只要一读取配置文件,马上就会创建配置文件中配置的对象。一般都是使用此种模式。
BeanFactory:(懒汉模式)什么时候getBean("id"),也就是说当根据id获取对象时,才会创建。
举例:
public class TestBeanFactoryAndApplication {
// public static void main(String[] args) {
// //读取配置文件
// ClassPathResource resource = new ClassPathResource("application.xml");
// //解析配置文件
// XmlBeanFactory factory = new XmlBeanFactory(resource);
// Object userDao = factory.getBean("userDao"); //拿到哪个bean时才会调用构造函数创建该bean.
//
// //当使用到bean对象时,spring才会帮你创建.
// Object people = factory.getBean("people");
// }
public static void main(String[] args) {
//在加载spring容器时,spring会把配置文件中所有的bean创建好。
ApplicationContext app=new ClassPathXmlApplicationContext("application.xml");
}
}
5.获取bean的方式
1.通过bean.xml文件中bean标签的id的值获取bean(使用默认构造方法)
IUserDao iUserDao= (IUserDao) app.getBean("userDao");
//根据bean的id获取Bean对象,强制转换.
2.通过类型去获取
确保bean的类型是唯一的 不然会报错
IUserDao userDao = app.getBean(IUserDao.class); //通过类型获取bean对象。
3. 通过 id + 类型去获取
IUserDao userDao = app.getBean("userDao2", IUserDao.class);
6.bean的作用范围
bean对象的作用范围调整需要配置scope属性,设置单例还是多例(只针对ApplicationContext接口来说,默认是单例的)
单例:---无论创建多少次对象 他们始终指向同一个实例。
scope:常用 singleton,prototype
singleton:单例的(默认值)当加载配置文件时,就会创建对象。
prototype:多例的(当getBean时才会创建对象)
request:作用于请求范围---同一个那么使用bean同一个。
session:作用于会话范围---同一个会话