Spring
标签(空格分隔): SSH Spring
1、Spring什么
- structs是web框架(jsp/action/actionform)
- hibernate是orm框架,处于持久层
- spring是容器框架,用于配置bean,并维护bean之间关系的框架。其中bean可以是Java中任何一种对象,比如Javabean、service、action、数据源、dao。
- ioc(控制反转 inverse of control),di(dependency injection 依赖注入)
- spring框架可以管理web层、业务层、dao层、持久层,可以配置各个层的bean并维护bean之间的关系。(一站式框架)
web层:SpringMVC
service层:spring的IOC
dao层:spring的jdbcTemplate - 配置各种bean:web层 action[解决action单例问题];业务层 service、domain、dao;持久层:数据源
2、Spring快速入门
当ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”)执行时,spring容器被创建,同时applicationContext.xml中配置的bean就会被创建(在内存中[hashmap/hashtable])。
1. ioc是什么?
所谓控制反转就是把创建对象(bean)和维护对象关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护。
比如,有一个类,在类里面有一个非静态的方法,要使用该方法,则必须new一个对象。通过IOC,把对象的创建不是通过new方式实现,而是交给spring配置创建类对象。
2.di是什么?
依赖注入:实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring的核心技术。
3、获取bean
BeanFactory factory = new XmlBeanFactory(
new ClassPathResource("applicationContext.xml"));
factory.getBean("");
// 1.ClassPathXmlApplicationContext:从类路径中加载。
// 2.FileSystemXmlApplicationContext:从文件系统加载。
// 3.XmlWebApplicationContext:从web系统中加载。
ApplicationContext context = new FileSystemXmlApplicationContext("c:\foo.xml");
ApplicationContext context = new ClassPathXmlApplicationContext("foo.xml");
context.getBean();
bean工厂和ApplicationContext的区别:
1) bean工厂只有再调用getBean时才会实例化一个bean
2) ApplicationContext在加载applicationContext.xml配置文件时就会实例化文件中配置的bean
4、bean的生命周期
bean被载入到容器中时,他的生命周期就开始了。:
- 容器寻找bean的定义信息并实例化。
- 使用依赖注入,spring按bean定义信息配置bean的所有属性。
- 若bean实现了BeanNameAware接口,工厂调用Bean的setBeanName
()方法传递bean的ID。- 若bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()
方法传入工厂自身。- 若BeanPostProcessor(bean后置处理器)和bean关联,则它们的
postProcessBeforeInitialization()方法被调用。 [过滤器举例理解]- 若bean指定了ini-method方法、,它将被调用。
- 最后,若有BeanPostProcessor和bean关联,则它们的
postProcessAfterInitialization()方法被调用.
5、IOC底层原理
(1)IOC底层原理使用技术
- xml配置文件
- dom4j解析xml
- 工厂设计模式
- 反射
(2)IOC的背景
(3)实现原理
6、AOP原理
(1)AOP概念
Aspect Oriented Programing 面向切面(方面)编程,扩展功能不是通过修改源代码实现的, AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码。
纵向机制:继承
(2)AOP原理
底层使用 动态代理 方式实现
(3)AOP操作术语
- joinpoint(连接点):类里面可以被增强的方法,这些方法就是连接点。
- pointcut(切入点): 在类里面可以有很多方法被增强,但是实际操作中,我们可能只对add和update方法进行了增强,这些实际增强的方法就是切入点。
- advice(通知、增强):增强的逻辑,称为增强,比如扩展日志功能,这个日志功能称为增强,通知分为前置通知、后置通知、异常通知、最终通知、环绕通知(切面要完成的功能)。
- 前置通知:在方法之前执行
- 后置通知:在方法之后执行
- 异常通知:方法出现异常时执行
- 最终通知:在后置之后 执行
- 环绕通知:在方法之前和之后执行
- aspect(切面):把增强应用到具体方法上面,这个过程就是切面。
- introduction(引介):一种特殊的通知,在不修改类代码的前提下,introduction可以在运行期为类动态地添加一些方法或Field。
- target(目标对象):代理的目标对象(要增强的类)
- weaving(织入):把增强应用到目标的过程,把advice应用到target的过程。
- proxy(代理):一个类被AOP织入增强后,就产生一个代理类