例:类A调用类B,而且A没有对B有set属性时,获得B的对象需要通过factory.getBean(id)获得。(适合于一般的application程序)
如果
A
有
setB
的属性,并且
A
也在
spring
的
xml
文件中,则获得
B
对象时,
spring
已经自动注入了,无需再通过工厂获得(适合用于
web
系统,
jsp
请求
action
;
action
,
business
,
dao
类都在
xml
文件中,且都注入,因为有
jsp
触发事件)。
AOP
主要用于事务管理,其机制跟
DataSource
类似,对类添加监听器
invocation
,当类的方法(无事物)被调用时,触发监听器的
invoke
方法,添加事物,用反射调用方法。
DataSource
Connection con = DriverManager.getConnection();
对
con
添加了类似
AOP
的监听器,当调用
con.close()
时候,并不是真的执行
close
方法,而是触发的监听器的方法,把连接放回连接池,而不是销毁连接。
IOC
AOP
主要是基于
IOC
的实现。比如,
AOP
添加监听器的动作,并不需要创建一个对象,再创建监听器,并把监听器添加到对象中。而是通过传进来的类名,在
xml
文件中找到相应的路径,通过反射创建该对象,并添加监听器。
主要是通过解析
xml
文件,把对应的属性和值存到
Properties
类中。调用类时,把该类需要的一些属性在
properties
中,调用一个
beanfactory
实现类,使用
properties
中的属性,用反射创建对象,调用其方法。