接口:屏蔽实现的差异
非 web 环境 (main junit) :ClassPathXmlApplicationContext
web 环境 :XmlWebApplicationContex
ctrl+h 查看接口的实现类
Java程序
第一步
在resources创建applicationContext.xml(Spring config)
第二步
创建接口实现类
Application ctx=new ClasspathXmlApplicationContext ("类的路径")
ctx.getBean("类的id")
Person person = (Person) ctx.getBean("person");
//根据name 的类名, 只能有一个bean class是Person类型
Person person1 = ctx.getBean(Person.class);
//
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
for (String a:beanDefinitionNames){
System.out.println(a);
}
System.out.println();
String[] beanNamesForType = ctx.getBeanNamesForType(Person.class);
for (String a:beanNamesForType){
System.out.println(a);
}
System.out.println( ctx.containsBeanDefinition("user"));
工厂模式的优点 解耦合 可以在配置文件中改变对象,而不用在代码中改变,方便运维
工厂模式的原理 反射,接口回调
基于动态代理的开发
分为三步
创建原始对象
创建实现额外功能的对象
切入点和组装,因为要复用,所以要可以到处拼
第一步很简单,创建一个类,实现某个接口的功能进而实现(impl)
第二步也很简单 创建要实现额外功能的类,这里有分支,可以创建一个类实现
MethodInterceptor接口
或者基于注解,与继承很类似,因为都可以被spring 识别
第三步 切入点是指要放到什么地方 组装就是将切入点与 额外方法对应
AOP的优点 方便对原始类进行维护,进行代码功能的拼接(中介)
AOP的原理 1、 JDK的动态代理*(基于原始对象的接口,进行代理对象的创建)
2、Cglib 基于继承原始对象来创建对象
在对类的创建过程中,在BeanPostProcess的实现类对Bean进行加工,直接返回的是代理类



