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