spring

ioc/DI控制反转及依赖注入

指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合。

  1. 简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象
  2. 拿到的对象的属性,已经被注入好相关值了,直接使用即可。
  3. 在这里插入图片描述
    从示意图可以看出,当web容器启动的时候,spring容器就会开始初始化,会去xml配置文件中扫描的包下面获取到所有的类,并根据你使用的注解,进行对应javaBean的封装,封装到全局的bean容器中进行管理,一旦容器初始化完毕,beanID以及bean实例化的类对象信息就全部存在了,现在我们需要在某个service里面调用另一个bean的某个方法的时候,我们只需要依赖注入进来另一个bean的Id即可,

aop切面编程

这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

  1. 面向对象oop的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。这样做的好处是降低了代码的复杂程度,使类可重用。但是人们也发现,在分散代码的同时,也增加了代码的重复性,比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,而不能将这些重复的代码统一起来。也许有人会说,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。
  2. 那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
  3. AOP其实只是OOP的补充而已
  4. 在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。
    所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
    所谓的周边功能,比如性能统计,日志,事务管理等等
    周边功能在Spring的面向切面编程AOP思想里,即被定义为切面
    在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发
    然后把切面功能和核心业务功能 “编织” 在一起,这就叫AOP,其实就是给业务功能添加个辅助功能
//核心业务功能
<bean name="s" class="com.how2java.service.ProductService">
    </bean>   
     
 //切面辅助功能
    <bean id="loggerAspect" class="com.how2java.aspect.LoggerAspect"/>
     
     //aop配置
    <aop:config>
		//切点配置业务功能
        <aop:pointcut id="loggerCutpoint"
            expression=
            "execution(* com.how2java.service.ProductService.*(..)) "/>
             
             //切面配置辅助功能
        <aop:aspect id="logAspect" ref="loggerAspect">
            //指定环绕切点,表示对com.how2java.service.ProductService 这个类中的所有方法进行切面操作
            <aop:around pointcut-ref="loggerCutpoint" method="log"/>
        </aop:aspect>
    </aop:config>    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值