1.IoC(控制反转)
所谓控制反转,只要一个类将它内部状态的控制权交给其他机制来完成。就是程序中不创建对象,只在配置文件中,描述如何创建它们的方式。在代码中,不直接与对象和服务连接,在配置文件中描述哪个组件需要哪项服务。
IoC(控制反转)是目的,DI(注入依赖)实现控制反转的手段。
所谓依赖注入,就是将依赖的对象的创建和服务都交给配置文件和Spring框架(若不使用Spring框架,程序需要创建对象和相应的服务),依赖类只需要声明所需要的成员变量。也就是说,依赖类原本需要主动去获取对象,但采用依赖注入后对象由第三方机构提供,自己仅需声明需要什么对象即可。
举个栗子:
不使用Spring框架时:
//使用传统的方法,不考虑使用Spring框架
UserService userService = new UserService();
userService.setName("Dr_xiao");
userService.sayhello();
使用Spring框架时:
//使用Spring框架方法
//1.引入Spring的开发包(idea会自动下载)
//2.创建Spring核心文件spring-config.xml
//3.创建一个Spring的IOC容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//4.从IOC容器中获取Bean实例
UserService userService = (UserService) context.getBean("UserService");
//5.调用相应的方法
userService.sayhello();
2.AOP(面向切面编程)
所谓面向切面编程,是对所有对象或者一类对象进行编程(安全、日志、事物都属于切面)。就是说不再关注于对象编程,而是更多的可以创建非行为性的关注面,将他们插入到应用程序中。目标是在不改变代码的情况下,让程序动态增加新的服务。
面向切面编程,是面向对象编程的一种补充,动态的将代码切入到类的指定方法、指定位置上。
面向对象编程(OOP)是从横向上区分出一个一个类来,而面向切面编程(AOP)是从纵向上向对象中加入特定的代码。
使用AOP的方法步骤:
- 定义组件:业务组件、通知组件(前置、后置、环绕...)
- 在容器中配置组件,以及组件之间的依赖关系注入
- 通过AOP注入通知
- 实例化容器,从容器中取出组件进行使用
举个栗子:
//1.定义接口
//2.编写对象(被代理对象=目标对象)
//3.编写通知(前置通知目标方法调用前调用)
//4.在xml文件中进行配置
//4.1 配置被代理对象=目标对象
//4.2 配置通知
//4.3 配置代理对象是ProxyFactoryBean的对象实例
//4.3.1 <!-- 代理接口集 -->
//4.3.2 织入通知
//4.3.3 配置被代理对象