• Spring01


     基于xml方式注入属性
    1,DI 依赖注入,就是注入属性

    原始方式设置属性:

    1. public class Book {
    2. private String bname;
    3. public String getBname() {
    4. return bname;
    5. }
    6. public void setBname(String bname) {
    7. this.bname = bname;
    8. }
    9. public static void main(String[] args) {
    10. Book book = new Book();
    11. book.setBname("java语言程序设计");
    12. }
    13. }

    在xml配置文件中注入属性:

    1. "book" class="spring01.Book">
    2. "bname" value="java语言程序设计">

    p名称空间注入:
    1,使用p名称空间注入,可以简化基于xml配置方式
    第一步 :
    添加p名称空间在配置

    xmlns:p="http://www.springframework.org/schema/p"

    第二步:

    简化之前设置属性:

    
        
    
    简化之后设置属性:
    
    
    //设置空值
    
        
            
        
    
        //含有特殊符号的
        
            //错误写法
    
            // 使用CDATA 正确写法 或者使用转义
            
                 >]]>   
            
        

     注入属性-内部bean和级联赋值
    1,一对多的关系 部门和员工

    2,在实体类之间表示一对多的关系

    1. public class Emp {
    2. public String ename;
    3. private Dept dept;
    4. public void setEname(String ename) {
    5. this.ename = ename;
    6. }
    7. public void setDept(Dept dept) {
    8. this.dept = dept;
    9. }
    10. }
    11. -----------------------------------------------
    12. public class Dept {
    13. private String dname;
    14. public void setDname(String dname) {
    15. this.dname = dname;
    16. }
    17. }

     

    什么是Aop?
    1,面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,
    提到程序的可重用行,同时提高了开发的效率

    通俗描述就是,不通过修改源代码的方式,在主干功能里添加新的功能 


    AOP底层使用动态代理
    有两种情况动态代理
    1,有接口,使用jdk动态代理
    创建接口实现类代理对象,增强类的方法 

     2,没有接口 使用CGLIB动态代理


    创建子类的代理对象,增强类的方法

    AOP (JDK动态代理)
    使用jdk动态代理,使用Proxy类里的方法创建代理对象
    调用newProxyInstance方法,静态方法
    方法里有三个参数
    1,类加载器 classLoader 
    2,增强方法所在的类,这个类实现的接口,可以有多个类
    3,实现这个接口,InvocationHandler,创建代理对象,写增强的方法

     

    1. public interface Dao {
    2. public int add(int a,int b);
    3. }
    4. ==============================
    5. public class DaoImpl implements Dao{
    6. public int add(int a,int b){
    7. System.out.println("add方法正在执行");
    8. return (a+b);
    9. }
    10. }
    11. ==============================
    12. package test1;
    13. import java.lang.reflect.InvocationHandler;
    14. import java.lang.reflect.Method;
    15. import java.lang.reflect.Proxy;
    16. public class DaoProxy {
    17. public static void main(String[] args) {
    18. Class [] interfaces = {Dao.class};
    19. DaoImpl dao = new DaoImpl();
    20. // 1 类加载器 2 扩展方法的类实现的接口 3 Invocatonhandler 的实现类
    21. Dao dao1 = (Dao) Proxy.newProxyInstance(DaoProxy.class.getClassLoader(),interfaces,new invo(dao));
    22. int add = dao1.add(1, 2);
    23. System.out.println(add);
    24. }
    25. }
    26. //3 Invocatonhandler 的实现类 的要求
    27. /*
    28. 1, 构造方法传入扩展方法的类
    29. 2, 返回invoke方法的返回值
    30. */
    31. class invo implements InvocationHandler {
    32. private Object obj;
    33. public invo(Object obj) {
    34. this.obj=obj;
    35. }
    36. @Override
    37. public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
    38. System.out.println("大哥郊县");
    39. System.out.println(method.getName());
    40. Object invoke = method.invoke(obj, objects);
    41. System.out.println("一切都结束了");
    42. return invoke;
    43. }
    44. }

    AOP 的术语
    1, 连接点
    类里面的哪些方法可以被增强,这些方法成为连接点
    2,切入点
    实际被真正增强的方法就成为切入点
    3,通知(增强)
    实际增强的逻辑部分称为通知(增强)
    通知有多种类型
    *前置通知
    *后置通知
    *环绕通知
    *异常通知
    *最终通知
    4,切面
    是动作,把通知应用到切入点的过程

  • 相关阅读:
    神经网络梯度是什么意思,神经网络输出层节点数
    【物流推荐】HEGERLS堆垛机—自动化立体仓库中最重要的起重运输设备
    【面试经典150 | 数学】加一
    Q-Vision+CANpro Max总线解决方案
    NFS文件共享系统(K8S)
    java 旋转方阵
    Zookeeper 启动失败【Cannot open channel to 3 at election address...】
    软件测试基础篇(2)
    SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.3 H2数据库
    LeetCode-907. 子数组的最小值之和【单调栈,数组】
  • 原文地址:https://blog.csdn.net/qq_56951318/article/details/126737999