Spring-beans
Factory-bean技术
简单对象:通过new的方式可以创建的对象叫简单对象
复杂对象:不能通过new的方式创建的对象叫复杂对象
作用:创建复杂对象
1.开发步骤
I.创建类实现FactoryBean接口 泛型为自己创建的复杂对象的类型
II.在Spring的配置文件中进行配置
III.测试
注:通过Id获取的不是MyConnection对象,而是由该类创建的复杂对象
如果想要获取该类的对象,只要在创建对象的时候,ID前加&号
1.控制创建简单对象的次数
2.spring为什么需要我们制定创建对象的次数
开发者更熟悉对象特性,可以节约资源
3.spring工厂创建对象的生命周期
对象什么时候创建? Spring工厂被创建,则对象被创建
对象什么时候被销毁?Spring工厂被销毁(调用.close()方法),则对象被销毁
AOP(Aspect Oriented Programming) 面向切面编程
核心:代理设计模式
1.静态代理设计模式(static proxy)
I.service
核心: 核心功能:一定要有的功能,没有的话业务无法完成
处理业务的逻辑代码 额外功能:核心功能基础上添加的功能(可有可无)
调用Dao中的方法
额外:
控制事务
II.在service中应不应该有额外功能?
业务调用者:
service中必须有额外功能,没有额外功能,业务将面临风险
代码设计者:
service中不应该有额外功能,违反java中的各司其职性,额外功能经常需要被修改,不免影响核心功能
矛盾:静态代理设计模式来解决
III.生活案例:租房
租房 ---- 中介Service{ ---- 房东service{
租房(){ 租房(){
//打广告
//带客户看房 额外功能由中介来做
//找房东
核心:
//签合同
//收钱
}
}
IV.静态代理中的概念
原始类:只负责核心功能的类
原始方法:原始类中的方法
代理类:给原始类添加额外功能的类
V.静态代理的本质:代理类只负责额外功能,原始类只负责核心功能,通过代理类为原始类增加额外功能
VI.静态代理的缺点
①类过载
有一个原始类,就需要写一个代理类,造成类过载
②额外功能代码冗余,不利于项目的维护
动态代理设计模式(Dynamic Proxy)
一、开发步骤
- 开发原始类 -- 核心功能
①规范
②原始类
1.配置原始类的相关信息
2.定义额外功能
3.配置额外功能类的相关信息
4.定义切点
5.组装切面
6.测试
- 切入点表达式的含义
、
分类:(3种) 方法切入点、类切入点、包切入点
1.方法切入点 -- 维度:只与方法有关,与类和包无关
例:①为注册regist()方法添加额外功能
②为带有一个参数为String类型的regist()方法添加额外功能
③为带有两个参数为String类型的regist()方法添加额外功能
④为第一个参数为String类型,后面参数不管的regist()方法添加额外功能
2.类切入点
例:为所有包以及子包下的UserServiceImpl类中的第一个参数为String的regist()方法添加额外功能
3.包切入点
例:为com.hp.service中的UserServiceImpl类的带一个String参数的regist方法添加额外功能
- 切入点函数
除execution外,常用的还有args和within
1.args:只专注于方法的参数
例:①为带有一个参数为String类型的regist()方法添加额外功能
原:execution(* *(String))
args(String)
②为第一个参数为String类型,后面参数不管的regist()方法添加额外功能
原:execution(* *(String,..))
args(String,..)
2.within:只专注于包和类
例:①给UserServiceImpl类中的所有方法添加额外功能
原:execution(* *..UserServiceImpl.*(..))
within(*..UserServiceImpl)
②给com.hp.service包以及子包下所有类中的方法添加额外功能
原:execution(* com.hp.service..*.*(..))
within(com.hp.service..*)