Spring部分基础知识(后续会修改和更新)
Spring框架结构图
1、 Spring AOP提供Spring框架基本功能,主要组件是BeanFactory,他提供工厂模式的实现。
2、 Spring上下文是一个配置文件,向Spring框架上下文信息。
3、 通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring框架中。
4、 Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误信息。
5、 Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具。
6、 Spring Web模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。
7、 Spring MVC框架:Spring的MVC框架是一个全功能的构建Web应用程序的MVC实现。
IoC的实现策略有两种
1、 依赖查找:
2、 依赖注入:
好处:
a) 查询依赖操作和应用代码分离。
b) 受控对象不会使用到容器的特定的API。
Java发射机制实现IoC容器
主要提供了以下功能
1、 判断任意一个对象所属的类
2、 构造任意一个类的对象
3、 判断任意一个类所具有的成员变量和方法
4、 调用任意一个对象的方法
5、 生成动态代理
JDK中,主要有以下类来实现Java反射机制
1、 Class类:代表一个类
2、 Field类:代表成员变量
3、 Method类:代表类的方法
4、 Constructor类:代表类的构造方法
5、 Array类:提供了动态创建数组,以及访问数组元素的静态方法
实现具体代码如下:
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class MyClass {
private String str1;
private String Str2;
public MyClass(String str1, String str2) {
this.str1 = str1;
this.Str2 = str2;
}
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1;
}
public String getStr2() {
return Str2;
}
public void setStr2(String str2) {
Str2 = str2;
}
public String sayHello(String name){
return "Hello"+name;
}
public static void main(String[] args){
try {
// String claz="MyClass";
// Class cls=Class.forName(claz);
// System.out.println(cls.toString());
Class[] types=new Class[]{String.class,String.class}; //变量参数数组
Constructor cons=MyClass.class.getConstructor(types);//根据参数获得构造参数
Object[] objs=new Object[]{"a","b"};
MyClass clazz=(MyClass) cons.newInstance(objs);//传入参数创建MyClass类的对象
Class[] type2=new Class[]{String.class};
Method method=MyClass.class.getMethod("sayHello", type2);//根据类的对象创建方法,第一个参数是方法名,第二个是参数类型
Object[] strs=new Object[]{"World"};
Object result=method.invoke(clazz, strs);//调用方法,第一个参数是类的实例,第二个是参数数组
System.out.println(result.toString());
// Field field=MyClass.class.getDeclaredField("str1");
// field.set(clazz, "Hello");
// System.out.println(field.get(clazz));
} catch (Exception e) {
// TODO: handle exception
}
}
}
依赖注入:
1、 接口注入
2、 构造注入
3、 设置注入(set()注入设置)