1.注解方式和配置文件方式的混用:
1.配置文件方式 : 用于配置对象的创建
<beans>
<!--开启扫描-->
<context:component-scan base-package="需要扫描注解的包名"></context:component-scan>
<!--配置对象-->
<bean id="对象在框架中的名称" class="要被创建对象那个类的全类名"></bean>
</beans>
2.注解方式 : 用于搭建对象之间的引用关系 @Resource(name="被引用对象的名字")
2.aop的实现方式动态代理:
1.使用JDK动态代理,针对有接口的情况,
2.使用cglib动态代理,针对没有接口的情况;
3.代理工厂类做的事情:
当你给动态代理工厂一个需要被代理的对象 target 时,动态代理工厂用Proxy的API给你动态创建一个代理对象proxy,并且会同时给
这个代理对象绑定了一个invoke()方法(ps:这个invoke()方法是在一个 Invocation 类中定义的),这个invoke方法有何特
点呢? 1.因为代理对象 proxy 是工厂给你的,这个invoke()方法也是工厂给你绑定的,所以,这个invoke()方法可以监听到你在
什么时候,调用了这个代理 proxy 的哪个方法 method(),所以一旦你调用代理的某个方法,马上就会被invoke()方法监听到,它可以马上
获得当前被调用的方法 method() 的对象 Method,以及调用方法的代理对象 proxy ,还有你调用方法时传入的参数 Object[] params ;
当然,此时你也可以获得被代理的对象 target(实际操作中是让代理工厂实现了Invocation接口,那么invoke()方法也在代理类中,所以在创
建代理类时通过构造传参,将对象target传过去),那么此时此刻,你可以在invoke(),方法中直接 用你获得的method对象,传入被代理的对象
target 和 参数 params,这样就完成了通过代理对象 proxy 调方法,实现了 目标对象 target 的相应方法被调用,但是,但是,如果你一旦
在invoke()方法中写点儿其他东西,比如说:你在 Method 对象invoke之前或者之后 做了一些其他的操作,那么这就意味着,此时此刻,你用
代理调用方法,不仅意味着目标对象target的相应方法被调用,而且同时执行了其他操作,这个就是动态代理实现了功能的增强;
spring1.1
最新推荐文章于 2023-11-14 10:25:16 发布