spring框架是一个轻量级的一站式框架,替代了ejb,面试中遇到问题最多的就是aop和ioc原理(楼主栽了不少次),所以看了一些资料,下面是自己理解的ioc底层原理,特此记录一下,作为温习之用(本人菜鸟,有说的不合理的地方,请下方评论spring 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;
    }spring Ioc底层原理
下面是aop的实现
首先引入aop命名空间
<!--声明自动为spring容器中那些配置@aspectJ切面的bean创建代理,织入切面。 **自动代理功能 -->
<aop:aspectj-autoproxy/>

    1.注解方式
//定义个切面类
@Aspect
@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个或多个参数
匹配注解:
spring Ioc底层原理





相关文章: