文章部分内容整理自郭永锋视频教学内容!
目录
9、Spring半自动代理(JDK动态代理、cglib 增强字节码)
10、Spring全自动代理(JDK动态代理、cglib 增强字节码)
1、IoC控制反转的概念
Inverse of Control 反转控制的概念,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理,简单说,就是创建对象控制权被反转到了Spring框架。
2、DI依赖注入
Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件。如下例子
在UserService中提供一个get/set的name方法,在beans.xml中通过property去注入。
|
|
3、加载Spring容器的三种方式
类路径获得配置文件(常用) |
|
文件系统路径获得配置文件 |
|
使用BeanFactory(过时) |
|
4、bean的作用域
类别 |
说明 |
singleton |
在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值 |
prototype |
每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时 ,相当于执行new XxxBean() |
|
|
5、@Component注解
注解:就是一个类,使用@注解名称,使用注解可以取代 xml配置文件。
@component注解可取代xml文件中bean的配置。
@component取代<bean class="">
@component("id")取代 <bean id="" class="">
@Repository(“名称”) |
dao层 |
@Service(“名称”) |
service层 |
@Controller(“名称”) |
web层 |
@Autowired |
自动根据类型注入 |
@Qualifier(“名称”) |
指定自动注入的id名称 |
@Resource(name=“名称”) |
等效前两个注解 |
@ PostConstruct |
自定义初始化 |
@ PreDestroy |
自定义销毁 |
举例:
开启注解 |
|
引用注解 |
|
6、AOP概述
- AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
- AOP是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
- 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
- AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码。
- 经典应用:事务管理、性能监视、安全检查、缓存 、日志等。
- AOP实现原理:AOP底层采用代理机制进行实现,spring采用 jdk 的动态代理Proxy和 cglib字节码增强。
7、AOP术语
- target:目标类,需要被代理的类。例如:UserService
- Joinpoint(连接点):所谓连接点是指那些可能被拦截到的方法。例如:所有的方法
- PointCut 切入点:已经被增强的连接点。例如:addUser()
- advice 通知/增强,增强代码。例如:after、before
- Weaving(织入):是指把增强advice应用到目标对象target来创建新的代理对象proxy的过程.
- proxy 代理类
- Aspect(切面): 是切入点pointcut和通知advice的结合
一个切入点和一个通知,组成成一个特殊的面。
8、JDK动态代理和cglib 增强字节码的区别
JDK动态代理只能用于有接口的实现类,而cglib 增强字节码既可以用于有接口的实现类,也可以用于没有接口的类。
9、Spring半自动代理(JDK动态代理、cglib 增强字节码)
第一步:导Jar包 |
|
|
|
第二步:目标类 |
|
|
|
第三步:切面类 |
|
|
|
第四步:spring配置 |
|
|
|
第五步:测试 |
|
|
注:Spring配置中<property name="optimize" value="true"></property>代表使用的是cglib 增强字节码代理,注释掉则使用JDK动态代理。
10、Spring全自动代理(JDK动态代理、cglib 增强字节码)
第一步:导入jar包 |
第二步:Spring 的AOP配置 |
第三步:测试 |
|
注:Spring配置中proxy-target-class="true"代表使用的是cglib 增强字节码代理,flase则使用JDK动态代理。
11、AspectJ——AOP框架
- AspectJ是一个基于Java语言的AOP框架。
- Spring2.0以后新增了对AspectJ切点表达式支持。
- @AspectJ 是AspectJ1.5新增功能,通过JDK5注解技术,允许直接在Bean类中定义切面。
- 新版本Spring框架,建议使用AspectJ方式来开发AOP。
- 主要用途:自定义开发。
12、AspectJ基于xml的使用
第一步:导包 |
|
|
|
第二步:实现类和切面类 |
|
|
|
第三步:spring的xml配置 |
|
|
|
第四步:测试 |
|
|
13、AspectJ基于注解的使用
第1步:声明使用注解 |
|
|
|
第2步:注解service和切面bean |
|
|
|
|
|
第3步:声明切面 |
|
|
|
第4步:声明前置通知 |
|
|
|
第5步:声明公共切入点 |
|
|
|
第6步:声明后置通知 |
|
|
|
第7步:声明环绕通知 |
|
|
|
第8步:声明异常通知 |
|
|
|
第9步:声明最终通知 |
|
|