目录
框架
IoC、DI和AOP思想
Spring框架
BeanFactory的快速入门
ApplicationContext快速入门
框架
1.概念:我们把具备一定业务领域解决方案的“工具”称为框架
2.框架的基本特点:
>框架(Framework) ,是基于基础技术之上,从众多业务中抽取出的通用解决方案;
>框架是一个半成品,使用框架规定的语法开发可以提高开发效率,可以用简单的代码就能完成复杂的基础业务;
>框架内容使用大量的设计模式、算法、底层代码操作技术,如反射、内省、xml解析、注解解析等;
>框架一般都具备扩展性;
>有了框架,我们可以将精力尽可能的投入在纯业务开发商而不用去费心技术实现以及一些辅助业务
IoC、DI和AOP思想:
1.IoC:Inversion of Control,控制反转,将Bean的创建权由原来程序反转给第三方
2.DI:Dependency of Injection,依赖注入,某个Bean的完整创建依赖其他Bean的注入
3.Ioc和DI的关系:
>IoC强调的是Bean创建权的反转,而DI强调的是通过注入的方式反转Bean的创建权,认为DI是IoC的其中一种实现方式。
4.AOP:Aspect Oriented Programming,面向切面编程,是对面向对象编程OOP的升华。OOP是纵向对一个事物的抽象,一个对象包括静态的属性信息,包括动态的方法信息等。而AOP是横向的对不同事物的抽象,属性和属性、方法和方法、对象和对象都何以组成一个切面,而用这种思维去设计编程的方式叫做面向切面编程。
Spring框架
1.概述:Spring是一个开源的轻量级Java开发应用框架,可以简化企业级应用开发。Spring解决了开发者在JavaEE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。是当前企业中Java开发几乎不能缺少的框架之一。Spring的生态及其完善,不管是Spring哪个领域的解决 方案都是依附于SpringFramew基础框架完成的。
2.Spring Framework技术栈图示
BeanFactory的快速入门
1.Spring的BeanFactory的开发步骤:
2.IOC思想的实现:
>导入Spring的jar包或Maven坐标;
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.7</version>
</dependency>
>定义UserService接口及其UserServiceImpl实现类;
public interface UserService{}
public class UserServiceImpl implements UserService{}
>创建beans.xml配置文件,将UserServiceImpl的信息配置到xml中;
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl"></bean>
>编写测试代码,创建BeanFactory,加载配置文件,获取UserService实例对象。
public static void main(String[] args) {
//创建BeanFactory
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
//创建读取器
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
//加载配置文件
reader.loadBeanDefinitions("beans.xml");
//获取Bean实例对象
UserService userService = (UserService) beanFactory.getBean("userService");
System.out.println(userService);
}
3. DI依赖注入的实现:
>定义UserDao接口及其UserDaoImpl实现类;
public interface UserDao{}
public class UserDaoImpl inplements UserDao{}
>修改UserServiceImpl代码,添加一个setUserDao(UserDao userDao)方法用于接受注入的对象
//BeanFactory调用该方法,从容器中获得userDao设置到此处
public void setUserDao(UserDao userDao){
System.out.println("BeanFactory调用该方法,从容器中获得userDao"+userDao);
}
>修改beans.xml配置文件,在UserDaoImpl的<bean>中嵌入<property>配置注入;
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
>修改测试代码,获得UserService时,setUserService方法执行了注入操作。
ApplicationContext快速入门
1.ApplicationContext称为Spring容器,内部封装了BeanFactory,比BeanFactory功能更丰富强大,使用ApplicationContext进行开发。
public static void main(String[] args) {
//创建ApplicationContext,加载配置文件,实例化容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
//根据beanName获得容器中的Bean实例
UserService userService = (UserService) applicationContext.getBean("userService");
System.out.println(userService);
}
2.BeanFactory与ApplicationContext的关系
>BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring容器;
>ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化功能等。BeanFactory的API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装;
>Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且ApplicationContext内部还维护这BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又有融洽关系;
>Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是在配置文件加载,容器一创建就将Bean都实例化并初始化好。
3.只在Spring基础环境下,常用的三个ApplicationContext作用如下:
>ClassPathXmlApplicationContext:加载类路径下的xml配置的ApplicationContext
>FileSystemXmlApplicationContext:加载磁盘路径下的xml配置的ApplicationContext
>AnnotationConfigApplicationContext:加载注解配置类的ApplicationContext