前言
什么是spring
Spring是一个使用JavaBean,全方位整合各个组件,实现一站式开发的企业级应用的框架,说白了,就是一个兼容器,兼容各种开发的组件使得开发便捷高效!
spring体系架构
简单说明,spring包含的常用的重要的封装
IOC容器,管理所有的bean对象,降低组件之间的耦合
封装AOP技术,标准且便捷了切面开发编程
提供了事务管理,消息服务
提供了辅助类包括jdbcTemplate,便捷我们对数据库操作
支持几乎所有主流框架如shiro,mybatis等
Spring-IOC是什么
控制反转(IOC)
IOC(Inversion of Control):传统方式,程序员通过代码创建对象bean。spring以容器的方式去创建,并管理程序中的Bean对象。这种管理方式就是控制反转,装载Bean的容器也被称为IOC容器。
如何让IOC管理Bean对象,既Bean的配置方式有哪些
三种方式:
- 使用xml文件的方式使得Bean容器管理Bean对象
<?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">
<!-- xml方式配置Bean对象,使得IOC管理-->
<bean id="IocPerson" class="org.yangz.entity.IocPerson"></bean>
</beans>
- 使用注解,@ComponentSacn指定扫描范围,通过标识注解达到Bean容器管理对象
@ComponentSacn+@Controller类似 - 使用java代码,主要是@Configuration注解,把bean对象交给Bean容器管理
@Configuration
public class IOCConfig {
/**
* 此处@Configuration代表这是一个配置类,比如上面的xml配置文件,@Bean代表此方法返回对象IOC进行管理,已方法名作为Bean的id
* @return
*/
@Bean
public IocPerson getIocPerson(){
return new IocPerson("java config配置");
}
}
Bean容器有哪些
BeanFactory
基础的IOC容器,org.springframework.beans.factory接口,提供了完成的IOC支持,是管理Bean的工厂负责初始化各种Bean对象,并且管理他们的生命周期。
ClassPathResource classPathResource=new ClassPathResource("bean.xml");
BeanFactory beanFactory=new XmlBeanFactory(classPathResource);
IocPerson iocPerson = beanFactory.getBean("IocPerson", IocPerson.class);
ApplicationContext
继承了BeanFactory的的接口,增加了许多其他接口的功能,称之为上下文容器。springBoot种直接Autowired即可
ApplicationContext showBeanApplication=new ClassPathXmlApplicationContext("bean.xml");
IocPerson iocPerson2 = showBeanApplication.getBean("IocPerson1", IocPerson.class);
默认情况下,ApplicatinContext创建单例对象时,使用饿汉模式,当容器启动就会创建好所有对象。区别于BeanFactory懒汉模式,获取实例时才创建对象。
特点:
1. 继承了EnvironmentCapable,可以获取环境信息
2. 提供了统一的资源访问方式
3. 继承了MessageSource,可以支持国际化
4. 同时支持加载多个配置文件
5. 可以载入多个有继承关系的上下文,每个上下文专注于特定的层次
Bean的实例化方法有哪些,以xml配置ioc为例
<!-- xml方式配置Bean对象,使得IOC管理,默认使用构造方法进行实例化-->
<bean id="IocPerson1" class="org.yangz.entity.IocPerson"></bean>
<!-- 工厂模式,分别以实例工厂和静态工厂完成bean的实例化操作-->
<bean id="PersonFactory" class="org.yangz.entity.PersonFactory"></bean>
<bean id="IocPerson2" factory-bean="PersonFactory" factory-method="getIocPerson2"></bean>
<bean id="IocPerson3" class="org.yangz.entity.PersonFactory" factory-method="getIocPerson"></bean>
<!-- 此处是FactoryBean的配置,但是返回的确实Iocperson对象,他会直接调用getObject方法,而且模式单例模式-->
<bean id="IocPerson4" class="org.yangz.entity.PersonFactoryBean"></bean>
- 构造器方式
- 工厂方法(静态工厂,实例工厂)
public class PersonFactory {
// 静态工厂模式
public static IocPerson getIocPerson(){
IocPerson iocPerson = new IocPerson();
return iocPerson;
}
//实例工厂模式
public IocPerson getIocPerson2(){
IocPerson iocPerson = new IocPerson();
return iocPerson;
}
}
- FactoryBean接口
public class PersonFactoryBean implements FactoryBean<IocPerson> {
@Override
public IocPerson getObject() throws Exception {
return new IocPerson();
}
@Override
public Class<?> getObjectType() {
return null;
}
}