SSM的IOC和AOP

IOC:

传统模式下,当某个java对象需要调用另一个java对象的时候,通过new 被调用者的代码方式来创建对象,这样代码的耦合度增加,不利于维护
使用spring框架后,对象的实例不再由调用者来创建,由spring来创建,而不是由调用者的程序代码直接控制。这样控制权从应用代码转移到了spring容器,控制权发生了反转,这就是控制反转

用new出来的对象都是多例模式,ioc可以提供程序员选择多例模式、单例模式、立即加载、延迟加载,可以使程序员更关注与业务层

依赖注入的方式:

xml配置之Setter 注入

  
  

      
	      
	      
      
 

xml配置之构造器注入 

  
      
      
  

自动装配

  
  

      
  

  • no:不进行自动装配,手动设置 Bean 的依赖关系。
  • byName:根据 Bean 的名字进行自动装配。根据set方法的名字
  • byType:根据 Bean 的类型进行自动装配。
  • constructor:类似于 byType,不过是应用于构造器的参数,如果正好有一个 Bean 与构造器的参数类型相同则可以自动装配,否则会导致错误。
  • autodetect:如果有默认的构造器,则通过 constructor 的方式进行自动装配,否则使用 byType的方式进行自动装配。.

注解配置

在代码中加入@Resource或者@Autowired

@Autowired是由Spring提供;@Resource是由J2EE提供,需要JDK1.6及以上。

@Autowired只按照类型注入;@Resource默认按名称自动注入,也提供按照类型注入;

@Autowired按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。

@Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配

 

IOC的好处

  • 可维护性比较好,非常便于进行单元测试,便于调试程序和诊断故障

  • 每个开发团队的成员都只需要关心实现自身的业务逻辑,完全不用去关心其它的人工作进展

  • 提高了模块的可复用性

  • 更换一个实现子类将会变得很简单,只要修改配置文件就可以了,完全具有热插拨的特性

缺点

  • 生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观
  • 由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗
  • 需要进行大量的配制工作,比较繁琐

AOP: 

AOP通俗易懂
在我们的程序中,经常存在一些系统性的需求,比如权限校验、日志记录、统计等,这些代码会散落穿插在各个业务逻辑中,非常冗余且不利于维护,AOP就因此诞生了。
在哪里切入,也就是权限校验等非业务操作在哪些业务代码中执行。
在什么时候切入,是业务代码执行前还是执行后。
切入后做什么事,比如做权限校验、日志记录等。 

SpringAOP优点?

  • 集中处理某一关注点/横切逻辑
  • 可以很方便的添加/删除关注点
  • 侵入性少,增强代码可读性及维护性

AOP的实现原理

  • JDK动态代理
  • CGLIB动态代理

静态代理和动态代理的区别?

静态代理是程序运行前代理类的字节码文件就已经生成,动态代理是程序运行时利用反射创建生成字节码。

结果提炼

  1. AOP,也就是面向切面编程;其次还有面向过程和面向对象编程。
  2. Spring AOP实现主要是通过代理类的方式实现,有jdk动态代理CGLIB代理两种方式。
  3. Java动态代理只能够对接口进行代理,不能对普通的类进行代理(因为所有生成的代理类的父类为Proxy,Java类继承机制不允许多重继承);CGLIB能够代理普通类
  4. Spring内部,发现如果目标对象没有实现接口,则默认会采用CGLIB代理; 如果目标对象实现了接口,默认会采用Java动态代理;
  5. AOP用到的动态代理是对方法增强的方式之一。
  6. AOP的典型应用就是事务管理
     

你可能感兴趣的:(ssm,面试,java,spring)