我的Java学习记录5.21-01

1.AOP接触
1.
首先说明一下 spring的插件的作用
<context:component-scan base-package=“com.woniu”></context:component-scan>
在spring中的作用
spring就会自动扫描存在于com.woniu下面所有的java文件,如果扫描到文件中带有@Service,@Component,@Repository,@Controller,这类的注解,那么之后我们就
会对这些注解产生作用
2.
接下来,我们来说明一下@Service,@Component,@Repository,@Controller
这几个注解在spring框架中是效果是一样的
当然我们在做项目的时候最好是在业务层使用@Service
在持久层使用@Repository,在控制层使用@Controller
同时我们来说明一下这几个的作用
我的Java学习记录5.21-01
以下我们来说明一下上面图片的要点
我们举一个例子:
[email protected]如果想在后面写别名的话直接("")
b.在方法的上面注解也可以写成@Scope其中默认是单例模式(singleton),原型模式可以写成
@scope(“prototype”),原型模式,俗话可以理解为使用以前的地址,
那么单例模式我们可以理解为在每一次都会创建一个新的地址
c.在下面的我们要加上注入
@Autowired
@Qualifier(“chinese”)
private Man man;
其中@Resource(name="us)
Autowired是spring产生的 Resource是jdk产生的
3.AOP
aop:aspectj-autoproxy</aop:aspectj-autoproxy>是AOP要加入在beans.xml的主文件下的

AOP的核心概念 :
A、通知 :就是封装的边缘非核心业务功能
B、连接点 :织入通知的那个方法 (业务)
C、切入点 :多个连接点 组合在一起就叫切入点 切入点利用execution表达式进行查找
D、切面 :通知 + 切入点
E、织入 : 是一个过程 ,把通知加到切入点上去的过程

AOP通知类型的讲解
通知类导入有两种种方式
我的Java学习记录5.21-01
写在类的上面
@Order()里面的数字越小,优先级越高
@Component
@Aspect 代表是一个通知
两种方法导入execution
a.
我的Java学习记录5.21-01
b.我们在这边要导入(“execution(* com.woniu.dao..(…)”)
我的Java学习记录5.21-01
我的Java学习记录5.21-01
像这样导入进去,上面的注解分为
@Before 核心方法执行之前
@After 核心方法执行之后
@AfterReturning 核心方法执行完,报了异常就不会执行
@AfterThrowing 核心方法报了异常就会执行
@Around 核心方法执行之前和之后都会执行

我的Java学习记录5.21-01
其中有两个参数JoinPoint 是不执行方法
ProceedingJoinPoint里面有执行方法
注意点:当我们导入方法pjp.proceed()的时候可能要报异常
为什么around要有返回值呢?
因为核心方法可能会有返回值,所以我们在这里面定义的时候要有返回值

下面是execution的讲解
Execution表达式 :目的是选择切入点
Execution表达式举例 :
execution(public * (…))
匹配所有目标类的public方法
execution(
com.woniu.spring.MyService.(…) || com.woniu.spring.DeptService.(…))
匹配MyService类型的所有方法
execution(
com.woniu.spring.(…))
匹配com.tz.spring包下所有类的所有方法
execution(
com.woniu…(…))
匹配com.tz包、子孙包下所有类的所有方法
execution(
com….Dao.get(…))
匹配包名前缀为com的任何包下类名后缀为Dao的方法,方法名必须以get为前缀
如果要匹配所有访问修饰符,不写即可(千万不要用
号替代)。
Execution表达式可以使用 && || !连接起来

我的Java学习记录5.21-01
2.另外一种导入AOP日志的方法

在beans.xml里面导入插件
我的Java学习记录5.21-01
最后我们要在pom.xml里面导入插件
我的Java学习记录5.21-01