①IOC和DI降低了组件之间的耦合性 ,让程序员更专注于业务逻辑
②容器提供了众多的辅助类,能加快应用的开发
③spring对于主流的应用框架提供了集成支持,如hibernate,mybatis,Struts等
④spring属于低侵入式设计,代码的污染极低
⑤容器提供了AOP技术,利用它可以方便的实现权限拦截等功能
⑥创建对象默认是单例的,不需要再使用单例模式进行处理
⑦使用Spring构建的应用程序易于单元测试。
⑧Spring能够帮助我们真正意义上实现针对接口编程。
在传统的程序开发中,一个类如果需要用到另外一个类的功能,常常采用组合(也就是new 对象)或者使用工厂方法(工厂方法最终也是需要new) 的方式。这样类与类之间的耦合度变高了。
IOC(Inversion of Control)控制反转,DI(Dependency Injection)依赖注入,其实两者本质上是没有区别的
例如:在A类中调用B类的方法,那么我们就称 A依赖B,B为被依赖(对象),相信这点大家能够理解。
在spring中,B的实例对象被看成Bean对象,这个Bean对象由spring容器进行创建和管理,如此一来,A获取B的实例对象就不是由自己主动去获取,而是被动接受spring给它设值,那么,这个主动变为被动,就可以理解为“控制反转”。
而另一种说法,从spring容器的角度上看,它负责把A的依赖对象B(B是被依赖对象)注入给了A,所以我们可以理解为“依赖注入”
达到的效果:
你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。
依赖注入的两种方式:
set方法注入和有参构造注入
降低了组件间的耦合度,增强了可维护性和复用性
工厂模式+反射 可以采用dom4j来解析xml配置文件
我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
aop的使用场景
AOP,面向切面编程,不用修改源代码就可以扩展功能,底层使用动态代理实现
AOP中有三个重要的部分:
切入点(即类中实际增强的方法,aspectj可以和spring一起进行aop操作,可以通过在spring配置文件中使用表达式来配置切入点)
增强(又称为通知,消息)扩展的功能称为增强,通知包括前置通知,在方法之前执行,后置通知,在方法之后通知,异常通知,方法出现异常时通知,最终通知,在后置通知之后执行,环绕通知,在方法之前之后通知)
切面,切入点和增强的结合,就是把增强应用到具体方法上面的过程.
2 常用的表达式
execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>) -->访问修饰符可以为public,protected和private
(1)execution(* cn.itcast.aop.Book.add(..)) -->(..)表示可以有参数
(2)execution(* cn.itcast.aop.Book.*(..))
(3)execution(* *.*(..))
(4) 匹配所有save开头的方法 execution(* save*(..))
spring aop的使用方法①配置文件②使用注解(不太了解)