Idea编译Java版本出错
Idea控制Java版本
1. 包管理中
Project
Modules
两个地方都有设置Java版本的位置。
2. 偏好设置中
Cmd
+ ,
在Java Compiler
中也可以指定Java版本
Maven控制Java版本
如果是Maven项目,很有可能是因为Maven默认的Java的版本而出错。
在pom.xml
中进行配置
1 | <build> |
只要刷新Maven项目,就可以解决Java版本问题。
Project
Modules
两个地方都有设置Java版本的位置。
Cmd
+ ,
在Java Compiler
中也可以指定Java版本
如果是Maven项目,很有可能是因为Maven默认的Java的版本而出错。
在pom.xml
中进行配置
1 | <build> |
只要刷新Maven项目,就可以解决Java版本问题。
1 | @Configuration |
注意@EnableAspectJAutoProxy
开启自动Proxy。
如果是使用xml进行配置,也需要开启自动Proxy。
业务类应该返回相应的接口,动态路由的底层实现即是对接口进行调用。
1 | @Aspect |
@Aspect
实际上是引用的org.aspectj
包。
切面类@Component
注册为Bean
。
@Component
与@Bean
重复?通过切面来实现AOP
1 | public class CustomAspect { |
1 | <aop:config> |
这种方式更加简便,只需要定义一个切面类,类中的方法即可通过配置,来对切点进行操作,不再需要繁琐的实现接口。
但是无法实现更复杂的操作,比如打印调用的切点方法,类名等。
Spring AOP最重要的是可以让用户自定义切面。
![image-20210202221824940](/Users/edlison/Library/Application Support/typora-user-images/image-20210202221824940.png)
![image-20210202221950162](/Users/edlison/Library/Application Support/typora-user-images/image-20210202221950162.png)
1 | public class LogBefore implements MethodBeforeAdvice { |
1 | public class LogAfter implements AfterReturningAdvice { |
1 | <?xml version="1.0" encoding="UTF-8"?> |
配置文件中,首先注册Bean
,引入AOP约束,对AOP进行配置。
通知器执行前后,完全靠实现的接口决定。
注意:
表达式见Google
相较于静态代理模式,所有的方法动态生成。
这里介绍基于JDK的方式实现动态代理。
1 | public class ProxyInvocationHandler implements InvocationHandler { |
返回代理类,需要传入:
Class加载器
.对象的接口
。InvocationHandler
接口。1 | public Object getProxy() { |
唤起事务处理。
1 | @Override |
实现了InvocationHandler
,需要重写invoke
方法。
使用反射的方法执行method.invoke
传入
在唤起执行方法前后,可以加入自定义的事务处理。
可以实现将一个ProxyInvocationHandler
分成一个CustomProxy
和一个CustomInvocationHandler
。
1 | public class CustomInvocationHandler implements InvocationHandler { |
1 | public class CustomProxy { |
1 | public class CustomClient { |
Proxy
与InvocationHandler
可以分离。
InvocationHandler
必须要传需要代理的接口。Proxy
必须要传需要代理的接口,以及自定义的Handler
。Proxy
与InvocationHandler
可以解藕,但是他们都需要被代理的接口。
进行接口实现接口的设计?
InvocationHandler
中实现了invoke
后其中传的Proxy
的作用?