JAVA坎坷之路(17 day)

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2022-7-20

jdk实现动态代理

Class[] c = {Add.class};
// Book.class.getClassLoader()类加载器 c 存放的是一个接口类的类数组 new UserProxy实现了InvocationHandler接口
Add o = (Add)Proxy.newProxyInstance(Book.class.getClassLoader(), c, new UserProxy(new AddImpl()));
// 转换类型 调用接口的方法
o.add();
o.show(2,3);
}
}

class UserProxy implements InvocationHandler {

private Object obj;

public UserProxy(Object obj){
this.obj=obj;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke=null;

// if(method.getName().equalsIgnoreCase("show")){
// method.getName()方法的名字 args方法的参数
// System.out.println(method.getName()+"==="+ Arrays.toString(args));
// invoke = method.invoke(obj, args);
// }
// 方法返回的参数
invoke = method.invoke(obj,args);

System.out.println("in"+invoke);

return invoke;
}
}

今天忙[泪][泪][泪]
更新拖几天[呵呵][呵呵]

板凳
翘舌音 2022-7-20
jdk是什么
[滑稽][滑稽][滑稽][滑稽]我也不知道
4楼
呵呵二爷爷 2022-7-20
aop术语

连接点:类里面哪些方法可以被增强,这些方法被称为连接点

切入点:真正被增强的方法,称为切入点

通知(增强):实际增强的逻辑部分称为通知(增强)

通知多种类型:前置通知,后置通知,环绕通知,异常通知,最终通知

切面:把通知应用到切入点的过程

spring框架一般基于AspectJ实现aop操作

AspectJ不是spring的组成部分 独立aop框架

切入点表达式:知道对哪个类里面的哪个方法进行增强

语法结构:execution(【权限修饰符】【返回类型】【类全路径】【方法名称】(【参数列表】))

案例 对com.hzx.spring包下的Book类的所以方法进行增强

*表示所有的修饰符 返回类型可以不写 类全路径 *匹配所有的方法(..)表示参数

execution(* com.hzx.spring.Book.*(..))
5楼
呵呵二爷爷 2022-7-20
```xml导入依赖 org.springframework spring-aspects 5.3.20 ```xml文件```xml ```BookProxy类
6楼
呵呵二爷爷 2022-7-20
BookProxy类```javapackage com.hzx.spring;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;@Component@Aspect//设置增强类的优先级 值越小优先级越高@Order(3)public class BookProxy {// 相同切入点抽取 @Pointcut(value = "execution(* com.hzx.spring.*.showBook(..))") public void ac(){}// 前置通知 匹配com.hzx.spring包下所有类的showBook方法 @Before(value = "ac()") public void test(){ System.out.println("测试前置通知"); }// 最终通知 @After(value = "ac()") public void test1(){ System.out.println("测试最终通知"); }// 环绕通知 @Around(value = "ac()") public void test2(ProceedingJoinPoint point){ System.out.println("之前");// 被增强的方法执行 如果不使用这个 那么增强的方法不会执行 try { point.proceed(); } catch (Throwable e) { throw new RuntimeException(e); } System.out.println("之后"); }// 异常通知 @AfterThrowing(value = "ac()") public void test3(){ System.out.println("发生异常了...."); }// 后置通知 @AfterReturning(value = "ac()") public void test4(){ System.out.println("后置通知"); }}```Book类```javapackage com.hzx.spring;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;//使用注解//@Service、@Controller、@Repository、@Component与...功能相似//如果没有指定名称 则按照首字母小写的方式自动命名@Service(value = "book")public class Book {// 自动装配 前提:装配的类也需要用注解声明是一个spring组件 @Autowired private Add add;// 注入普通属性 @Value(value = "哈哈") private String name; void showBook(){ System.out.println("注解启动"+name);// 测试异常通知 手动制造一个异常// int a=10/0; add.add(); }}```
7楼
呵呵二爷爷 2022-7-20
xml出不来 截个图吧

8楼
Py小松 2022-7-20
在哪学的啊
9楼
昵称2805 2022-7-21
以前学Java为能开发游戏脚本,现在摆烂了,打算找人做[阴险]
10楼
某某奈 2022-7-21
这么麻烦 居然还加入配置
为啥不直接用springboot

评论

登录后才可发表内容
  • 主题

    23

  • 帖子

    325

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0534s Mem:2138Kb