--------------------------------------------------------------------------------
WebAppliactaionContext 启动时需要日志功能,所以需要读取log4j 配置文件,一般放在web-inf/classes目录下。
AOP
动态代理
Spring ioc&annoation
bean的生命范围scope 默认singleton
-------------------------------------------------------------------------------
在项目中使用Spring IoC的步骤:
与IoC有关的jar包:
spring.core、spring.beans、spring.context、spring.expression
Spring容器成功启动的条件
Spring类
配置信息
Bean
String 3.x 2016.3.25
Ioc 容器:
代码解耦 设计模式 代码优化
注入方法:构造函数注入 属性注入 接口注入(一般不用,spring没有)
工作机制:
JVM 运行时产生三个classloader:
(爷爷)根装载器:(c++写的,java中找不到)负责装载JRE的核心类库,如JRE目标下的rt.jar,charsets.jar.
(爸爸)ExtClassLoader(扩展类装载器)负责装载JRE扩展目录Ext中的JAR类包
(儿子)AppClassLoader(系统类装载器)负责装载Classpath路径下的类包
ClassLoader 获取当前线程
Class 装载类的反射实例
Constructor 构造函数实例化类对象
Method getMethod(String method setter方法, Class paramClass传对象类型)
Invoke(Object obj, Object param)
Tips:
java.lang.NoSuch MethodError:全盘负责委托机制 JVM加载类时加载错版本的jar包
解决:srcAdd.jsp 放到web应用根路径下,http://localhost/srcAdd.jsp?className = java.net.URL 查看JVM从哪个类包加载指定类。
Private/protected 成员变量和方法,只要JVM安全机制允许也可以通过反射进行调用。
用setAccessible(boolean access) 方法取消Java语言检查,否则IllegalAccessException
要是JVM 设置了安全机制则抛出SecurityException
Spring 抽象资源接口(作用无论Spring配置信息放在哪儿都可以通过Resource接口返回信息)
资源加载
Classpath*:有*扫描所有JAR包出现的类路径,没有*只扫描第一个出现的classpath。
Ant风格的匹配符:?一个字符 ;*多个字符;**多层路径
Ant自动化编译工具
配置文件描述Bean及Bean之间的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。
Ioc容器提供了Bean实例缓存,生命周期管理,Bean实例代理,事件发布,资源装载等高级服务。
BeanFactory == Ioc容器(面向spring本身)
Application Context == 应用上下文/spring容器(面向使用spring的开发者)
BeanFactory启动Ioc容器,bean的初始化在第一次调用;而singleton的话,第一次就缓存Bean实例,以后直接取缓存实例。
初始化BeanFactory时必须在类路径下有Log4j配置文件,否则启动spring容器会报错。
Spring AOP基础
动态JDK 继承接口 为代理类的子类
Proxy(classLoader, Interface this(目标回调对象))接口InvokcationHandler
创建代理实例 目标对象与代理对象行为一致
调invoke方法(Object proxy,Method method args[])
CGLib 为代理类的父类
Implements Method Intercepter 重写intercept(Object proxy(target),Method args[])
简单属性注入
<property name="price" value ="8"></property>