独自快乐|spring框架的入门学习:AOP和面向切面的事务( 三 )


独自快乐|spring框架的入门学习:AOP和面向切面的事务如图所示 , 我们现需要三个步骤 ,
第一步是使用注解让spring帮助我们创建容器
第二步是执行创建容器的时候使用哪个配置文件
第三步是我们想要测试哪个类 , 我们就写一个属性 , 然后注解这个属性 , 那么spring就会将这个对象赋值给这个属性 , 之后我们就可以进行测试了 。
package com.huanfeng.shiyan;import javax.annotation.Resource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.core.env.SystemEnvironmentPropertySource;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.huanfeng.bean.Complex;import com.huanfeng.bean.User;//帮我们创建容器@RunWith(SpringJUnit4ClassRunner.class)//指定创建容器时使用哪个配置文件@ContextConfiguration("classpath:applicationContext.xml")public class Demo { //将名为user的对象注入到u变量中 @Resource(name="user") private User u; @Test public void fun1(){System.out.println(u); }}aopaop的核心思想
独自快乐|spring框架的入门学习:AOP和面向切面的事务我们可以使用filter来拦截请求 , 在filter内部使用动态代理来解决request的乱码问题 , 这就是aop的思想 , spring可以帮助我们生成代理对象 , spring有两种代理方式:
独自快乐|spring框架的入门学习:AOP和面向切面的事务要是使用动态代理需要注意的是被代理对象必须要实现接口才能产生代理对象
独自快乐|spring框架的入门学习:AOP和面向切面的事务在被代理对象中如果没有实现接口 , 那么没有办法使用动态代理技术
cglib代理技术可以对任何类生成代理 , 代理的原理是对目标对象进行继承代理 , 比如我们对A类进行cglib代理 , 实际上生成的这个代理对象是A类的子类
spring会优先使用动态代理技术
我们先来看看手动是如何安排的 , 下面通过一个具体例子来说明
具体说是手动的使用动态代理技术来完成对service的增强 , 也就是说在service中开启事务
我们先来建立一个Service的接口:
独自快乐|spring框架的入门学习:AOP和面向切面的事务这个service有两个方法 , 一个方法是增加方法 , 另外一个方法是删除方法 , 然后创建Service类从而实现这个接口:
独自快乐|spring框架的入门学习:AOP和面向切面的事务package com.huanfeng.service;public class UserServiceImpl implements UserService { @Override public void add() {//这里的工作是增加userSystem.out.println("增加"); } @Override public void delete() {//这里的工作是删除userSystem.out.println("删除"); }}按照之前的时候方法是直接使用Serive就可以了 , 但是此时的Service并没有开启事务 , 为了解决这个问题 , 我们可以使用动态代理技术 , 来对这个Service进行增强


推荐阅读