大佬把Spring框架总结的「无比详细」,看完还说不懂别学了( 三 )


singleton 只有一个实例,也即是单例模式 。
prototype访问一次创建一个实例,相当于new 。
 
 4.值类型的注入实际通过反射field赋值

大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
实际通过set方式赋值
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
 5.引用类型的注入面试题: @AutoWired和@Resource的区别?
@AutoWired默认以类型进行查找,@Resource默认以名称进行查找
@AutoWired(required=false) + @Qualifier("user") == @Resource(name="user")
其中@Resource注解是jdk1.6后才有的
 
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 

大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
 6.创建与销毁方法
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
 7.spring整合junit测试(spring创建容器)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")

大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
 6、spring中AOP名词解释
JoinPoint(连接点):目标对象中,所有可以增强的方法,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的前、后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点 。
Pointcut(切入点):目标对象中,已经被增强的方法 。调用这几个方法之前、之后或者抛出异常时干点什么,那么就用切入点来定义这几个方法 。
Advice(通知/增强) :增强方法的代码、想要的功能 。
Target(目标对象):被代理对象,被通知的对象,被增强的类对象 。
Weaving(植入):将通知应用到连接点形成切入点的过程
Proxy(代理):将通知植入到目标对象之后形成的代理对象
aspect(切面):切入点+通知————通知(Advice)说明了干什么的内容(即方法体代码)和什么时候干(什么时候通过方法名中的before,after,around等就能知道),二切入点说明了在哪干(指定到底是哪个方法),切点表达式等定义 。
虽然现在都用Maven项目构建,但是不能忘记,使用aop需要用到的包:spring-aop + spring-aspects + springsource.org.aopalliance + springsource.org.aspectj.weaver
关于AOP看一个小例子:
1、准备目标对象(被代理对象,被通知的对象,被增强的类对象)
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
2、准备通知(被增强方法的代码,想要实现功能的方法代码)
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
3、配置 applicationContext.xml
1.导入aop(约束)命名空间
2.配置目标对象
3.配置通知对象
4.配置将通知织入目标对象
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
4、测试
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
总结:通知的几种类型
1.前置通知———目标方法运行之前调用
2.后置通知———目标方法运行之后调用(如果出现异常不调用)
3.环绕通知———目标方法之前和之后都调用
4.异常拦截通知———如果出现异常,就会调用
5.后置通知———目标方法运行之后调用(无论是否出现异常都会调用)
 
 7、spring中的aop使用注解配置1、applicationContext.xml中配置目标对象,通知对象,开启使用注解完成织入
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
 
2、@Aspect注解代表该类是个通知类,书写切点表达式@Pointcut("execution(返回值 全类名.方法名(参数))")
大佬把Spring框架总结的「无比详细」,看完还说不懂别学了

文章插图
 
注意环绕通知需要这么写:
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {//环绕方法执行前//proceedingJoinPoint.proceed();表示对拦截的方法进行放行//若注释proceedingJoinPoint.proceed()则不会执行被AOP匹配的方法proceedingJoinPoint.proceed();//环绕方法执行后 }


推荐阅读