spring Ioc底层原理

    spring框架是一个轻量级的一站式框架,替代了ejb,面试中遇到问题最多的就是aop和ioc原理(楼主栽了不少次),所以看了一些资料,下面是自己理解的ioc底层原理,特此记录一下,作为温习之用(本人菜鸟,有说的不合理的地方,请下方评论微笑

    第一步:配置xml配置文件,配置要创建的对象类
         <bean id = "userService" class="com.aaa.UserService"/>
    第二步: 创建工厂类,使用dom4j解析配置文件+反射
         //返回UserService对象的方法
         public static UserService getService(){
         //1.使用dom4j解析xml文件
          //根据Id值userService ,得到id值对应的class属性值
         String classValue=“第一步中的class属性值”;
         //2.使用反射创建类对象
         Class class = Class.forName( classValue );
         //创建类对象
         UserService service = class.newInstance();
          return service;
     }
下面是aop的实现
首先引入aop命名空间
<!-- 声明自动为 spring 容器中那些配置 @aspectJ 切面的 bean 创建代理,织入切面。 激活自动代理功能 -->
< aop :aspectj-autoproxy />

    1.注解方式
//定义个切面类
@A spect
@Component
public class argsAspectDemo {
        //定义个切入点。拦截 com. aidongsports下面所有的类
         @Pointcut( "execution(* com.aidongsports..*(..))")
        public void machArgs(){ }
         
         //前置通知
         @Before(" machArgs() ")
         public void before(){
         System.out.println("******before advice*****");
     }

}

匹配参数:
//匹配任何以find开头 而且只有一个Long 参数的方法
@Pointcut("execution(* *..find*(Long) )")
public void argsDemo1(){}

//匹配任何一个只有Long参数的方法
@Pointcut("args(Long)")
public void argsDemo2(){}

//匹配任何以find开头 而且第一个参数为Long型的方法
@Pointcut("execution(* *..find*(Long,..) )")
public void argsDemo3(){}

//匹配第一个参数为Long型的方法
@Pointcut("args(Long,..)")
public void argsDemo4(){}
execution 表达式
(* com.aaa.service.*.*(..))中几个通配符的含义: 
第一个 * —— 通配所有返回值类型
第二个 * —— 通配包com.aaa.service下的所有class
第三个 * —— 通配包com.aaa.service下的所有class的所有办法
第四个 ..—— 通配 方法可以有0个或多个参数
匹配注解:





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值