1、怎么使用spring
spring是一个容器,把项目中用的对象放入到容器中
让容器完成对象的创建,对象之间关系的管理(属性赋值)
我们在程序中从容器中获取要使用的对象
2、什么样的对象放入容器中
1)dao类,service类,controller类,工具类--①使用xml配置文件,使用<bean>②注解
2)spring中的对象默认都是单例的,在容器中叫这个名称的对象只有一个
3、放到容器里中的对象
1)实体类对象,实体类数据来自数据库的
4、不放入spring容器中的对象
1)实体类对象,实体类数据来自数据库的
2)servlet,listener,filter等
5、使用spring框架的步骤
1)加入依赖
2)创建类:接口,实现类,没有接口的类
3)创建spring的配置文件,使用<bean>声明对象
4)我们使用容器中的对象,通过ApplicationContenxt接口和他的实现类ClassPathXmlApplicationContext的方法调用。
6、核心技术
1)set注入:spring调用类的set方法实现属性赋值①简单类型的set注入<property="属性名" value="属性的值"/>
②引用类型的set注入<property="属性名" value="属性的值"/>
2)构造注入:spring调用有参构造方法:①<constructor-arg>的name属性,那么表示构造 方法的形参名
②<constructor>的index属性,表示构造方法的形 参 的位置,从0开始。
3)自动注入:由spring根据某些规则,给引用类型完成赋值,常用的由byName和byType
①:byName按名称注入,java类中引用类型的属性名和spring容器中的id一 样,数据类型一样,这样的bean赋值给引用类型
②:byType按类型注入,java类中引用类型的是 数据类型和spring容器中的 bean的class是同源关系的,这样的bean能够赋值给引用类型
7、常用注解
8、aop面对切面编程
1)底层是动态代理
①jdk动态代理:使用jdk反射包中的类实现创建代理对象的功能
要求:目标类必须实现接口
②cglib动态代理:使用第三方的工具库,实现代理对象的创建
要求:目标类必须是能够继承,不能是final
原理:就是继承,子类就是代理
2)aop则是动态代理的规范话,把实现动态代理的步骤进行了要给规范定义
3)aop的作用
①.在目标源代码不变的情况下,增加啊功能
②.减少代码的重复性
③.专注于业务功能的实现
④.解耦合:业务功能和日志,事务这些非业务功能的耦合,
9、什么时候考虑用aop技术:
10、aop的实现框架
1)spring实现了aop,实现方式是接口
2)aspectj框架①使用注解可以是实现aop的功能
②使用xml配置文件中的标签实现aop功能
11、aop中的概念
1)aspect:切面,表示给业务方法增加的功能,一般日志输出,事务,权限检查等是切面
2)pointcut:切入点,是一个或多个JoinPoint的集合,表示切面功能执行的位置
3)advice:通知,也叫增强,表示切面执行的时间,在方法前,方法后等等
12、aspectj框架的使用
1)表示切面的执行时间,使用的通知注解--
①@Before:前置通知,在目标方法之前先执行切面的功能
②@AfterReturning后置通知,在目标方法之后执行的,能够获取目标方法的返回值
③@Around环绕通知,在目标方法前和后都能增加功能,控制目标方法的执行,修改返回值
④@AfterThrowing异常通知,在目标方法抛出异常后执行的通知
⑤@After最终通知,总是会被执行的代码
⑥@pointcut定义和管理切入点的辅助注解
⑦代理的使用方式
A.如果目标类有接口,框架使用jdk动态代理
B.如果目标类没有接口,默认使用的cglib动态代理
C.有接口也可以使用cglib动态代理
2)表示切面位置的切入点表达式:execution(访问修饰符 返回值 包名.类名.方法名称(方法的参数)异常)
13、spring整合mybatis
1)整合的想法:使用spring得到ioc核心技术,把mybatis框架中使用的对象交给spring统一创建和管理,spring是容器,存放你项目中使用的各种对象,例如Service对象,Dao对象,工具类对象等等
2)交给spring的mybatis对象:
①数据源DataSource,使用阿里公司的Druid连接池
②SqlSessionFactory对象,使用的SqlSessionFactoryBean在内部创建的SqlSessionFactory
③Dao代理对象,使用的是MapperScannConfigure,在这个类的内部,调用getMapper(),创建接口的Dao对象