IOC( Inversion of Control )的⼀个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。
其中依赖注入(DI Dependency Injection)是实现IOC的一种方式。
a.接口注入
b.setter方法注入
c.构造方法注入
d.注解方式注入
平常我们 new 一个实例,这个实例的控制权是我们程序员,而控制反转是指 new 实例工作不由我们程序员来做而是交给 spring 容器来做。
a. 单例模式——spring 中两种代理方式,若目标对象实现了若干接口, spring 使用 jdk 的java.lang.reflect.Proxy-Java 类代理。若目标兑现没有实现任何接口,spring 使用 CGLIB 库生成目标类的子类。单例模式——在 spring 的配置文件中设置 bean 默认为单例模式。
b. 模板方式模式——用来解决代码重复的问题。比如:RestTemplate、JmsTemplate、JpaTemplate
c. 前端控制器模式——spring 提供了前端控制器 DispatherServlet 来对请求进行分发。
d. 试图帮助(viewhelper)——spring 提供了一系列的 JSP 标签,高效宏来帮助将分散的代码整合在试图中。
e. 依赖注入——贯穿于 BeanFactory/ApplacationContext 接口的核心理念
f. 工厂模式——在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用同一个接口来指向新创建的对象。Spring 中使用 beanFactory 来创建对象的实例。
注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在 Spring 配置文件中配置context:annotation-config/元素。
@Required:该注解应用于设值方法 @Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。 @Qualifier:该注解和@Autowired 搭配使用,用于消除特定 bean 自动装配的歧义。
AOP ( AspectOrientedProgramming ),即 面 向 切 面 编 程 , 可 以 说 是 OOP(ObjectOrientedProgramming,面向对象编程)的补充和完善。
OOP 引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过 OOP 允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。
在 OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。AOP 技术恰恰相反,它利用一种称为"横切" 的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架触发的代码段。Spring 切面可以应用五种类型的通知:
1)before:前置通知,在一个方法执行前被调用。
2)after:在方法执行之后调用的通知,无论方法执行是否成功。
3)after-returning:仅当方法成功完成后执行的通知。
4)after-throwing:在方法抛出异常退出时执行的通知。
5)around:在方法执行之前和之后调用的通知。