Spring框架(二)

本文深入探讨了Spring框架中的Bean标签,详细介绍了class、id、factory-bean、factory-method等属性,以及scope、lazy-init等概念。同时,文章讲解了代理设计模式,包括静态和动态代理,通过生活中的中介、经纪人等例子来说明,并对比了JDK动态代理和CGLIB动态代理的差异。最后,文章简要介绍了AOP的概念和在事务管理、日志记录中的应用。
摘要由CSDN通过智能技术生成

bean标签详解
标签用于创建对象, 常用属性概述:

  1. class
    用于定位类, 写的是类型的全限定路径.
  2. id
    用于给的对象做唯一标识. 命名规则一般是字母, 数字, 下划线.
  3. factory-bean
    用于指定创建目标对象使用的工厂对象.
  4. factory-method
    用于指定调用工厂中的哪个方法去创建目标对象
  5. name
    给对象定义别名(小名, 昵称). 可以出现一些特殊符号(不建议使用$, #), 例如/.多个别名可以通过逗号, 分号, 空格进行分隔.
  6. init-method
    初始化时自动调用的方法. 对象创建后, getBean之前, 会被spring调用一次.
  7. destroy-method
    销毁时自动调用的方法. 对象被销毁前, 由spring自动调用.
  8. parent
    标签之间可以有继承关系. 可以简化属性的赋值操作.
  9. abstract
    抽象的. 使用abstract修饰的, 不能被getBean获取, 只能被其他继承.
  10. lazy-init
    懒加载(延迟加载). 默认情况下, 容器被加载时, 对象就被创建. 使用lazy-init修饰的, 容器创建时不会创建该对象, 当第一次调用getBean的时候再去创建对象.
  11. scope
    表示对象的作用范围及创建次数, 可选值有多个:
    a) singleton, 默认值. 单例
    b) prototype, 原型. 多例, 表示容器加载时不创建对象, 每次getBean都会创建一个新的对象.
    c) request, 同一次请求中, 对象单例
    d) session, 同一个会话中, 对象单例
    e) application, 在应用上下文中, 对象单例
    f) global session, 在portlet环境下的全局会话中对象单例
    g) websocket
    代理设计模式
  12. 什么是设计模式
    设计模式其实是解决一些特定问题的最佳方式.
  13. 生活中的代理
    中介
    经纪人
    代练
    媒婆
    翻墙软件
  14. 代理的好处
  15. 保护真实对象
  16. 真实对象只需要专注自己的核心业务, 额外的功能不需要考虑
  17. 代理可以在已有功能的基础上进行功能的增强.
  18. 代理模式中的角色
  19. 标准 --> 接口
  20. 真实对象(目标) --> 房东
  21. 代理对象 --> 中介公司的员工
  22. 用户 --> 租户(客户)
  23. 代理模式的分类
  24. 静态代理
    特点是代理对象是针对指定的目标做的, 所有代码都固定的, 由程序员提供. 代码实现非常简单, 不能复用.
  25. 动态代理
    特点是代理对象不是固定的, 代码是由后台根据情况生成的. 代理功能更加通用. 代码实现复杂, 可以复用.
  26. 静态代理的代码模拟
    /**
  • 标准 - 房屋租赁接口
    */
public interface Rent {
    /**
     * 出租房屋的方法
     *
     * @param money
     * @return
     */
    Object rent(Object money);
}

/**

  • 真实对象 - 房东
    */
public class Host implements Rent {
    @Override
    public Object rent(Object money) {
        System.out.println("出租成功, 价格是: " + money);
        return new Object();
    }
}

/**

  • 代理对象 - 中介人员
    */
public class Agent implements Rent {
    private Rent host;

    public Rent getHost() {
        return host;
    }

    public void setHost(Rent host) {
        this.host = host;
    }

    @Override
    public Object rent(Object money) {
        // 前置增强
        System.out.println("带客户看房");
        System.out.println("讲价");
        System.out.println("签订合同");
        // 调用业主的方法进行房屋的出租
        Object key = host.re
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值