依赖注入
@Autowired---是按照类型注入,
@Resource----是按照类型或者名称注入,如果使用名字进行注入的话,则必须要有一个bean的名字存在,如果不存在会报错。
5:bean的作用域
注解默认的也是单例的,如果需要多例,需要在对应的类上配置scope注解,@Scope(value=”prototype”)
注解和xml混用
1:xml实现核心配置
2:注解实现bean的声明以及注入
AOP的概述
什么是aop
AOP Aspect Oriented Programing 面向切面编程 ----是一种编程思想:在不修改源代码的情况下,对目标方法进行增强
使用动态代理的机制,在不修改源代码的情况下,对某些方法进行动态的增强
传统开发:
发现很多重复的代码:
解决方案:
众多方法中的所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有的代码
AOP解决之后:
好处:
1:程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅
2:日后的维护中由于业务逻辑代码与共有代码分开存放,而且共有代码是集中存放的,因此使维护工作变得简单轻松
aop的应用场景
场景一: 记录日志
场景二: 监控方法运行时间 (监控性能)
场景三: 权限控制
场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象,第二次调用,直接从内存对象返回,不需要查询数据库 )
场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 )
aop的相关术语
Spring AOP编程两种方式
lSpring 1.2 开始支持AOP编程 (传统SpringAOP 编程),编程非常复杂 ---- 已不再使用
l Spring 2.0 之后支持第三方 AOP框架(AspectJ),实现另一种 AOP编程 -- 推荐
aspectj切面编程
注意:
1:通知以及目标必须都是由spring管理的。
2:声明切面类@Aspect - 配置切入点表达式是在切面类中进行配置 - 一般情况下就是增强的类
3:使用切入点表达式进行配置
切入点表达式的语法
bean(beanId/name) -- 表示拦截某个bean下面的所有的方法
execution(* com.sky.service..*.*(..))
*:匹配任何数量字符;
..:匹配任何数量字符的重复,如在类型模式中匹配任何数量包和子包;而在方法参数模式中匹配任何数量参数。