spring框架是一个轻量级的一站式框架,替代了ejb,面试中遇到问题最多的就是aop和ioc原理(楼主栽了不少次),所以看了一些资料,下面是自己理解的ioc底层原理,特此记录一下,作为温习之用(本人菜鸟,有说的不合理的地方,请下方评论
)
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
第一步:配置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个或多个参数
匹配注解: