class MyTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserDoImpl userDo = context.getBean("UserDo", UserDoImpl.class); userDo.doWork();
注意:getBean中的UserDo一定是一个接口,不能是实现类!!!后面UserDoImpl才是实现类
一、代理:Proxy,能够实现在一个流程的横切面,统一的增加某一项内容
静态代理类:代码固定的,一个类的属性,set方法赋值,属性调用方法,实现代理
动态代理类:Proxy提供了创建动态代理类和实例的静态方法,它也是所创建的动态代理类的超类。
左边的代理工具是固定代码,右边的是执行代码
InvocationHandler:调用代理类,并返回结果
ProxyIn:生成代理实例
动态代理类,执行invoke方法,在方法中添加要执行一项方法,实质就把该方法切面插入了。
二、Spring做动态代理:
1、类导包(after,before),xml导aop约束。教训:从博客上拷了pom的依赖清单,导致所有项目都不能正常运行。
2、创建两个类
3、xml配置(中间商把类链接起来):
三、注解AOP实现
<aop:aspectj-autoproxy/>
xml中开启注解
@aspect 切面类
@Before("execution(* com.rzgsl.pojo.UserDoImpl.*(..))") //execution:执行位置
@After("execution(* com.rzgsl.pojo.UserDoImpl.*(..))")
前提,类必须得再xml中注册,后者使用@compont注解交给spring管理
*返回值类型,*方法,..多个方法
四、Spring整合Mybatis
原来mybatis-config.xml中的配置,可以整合写在spring-mybatis.xml中,spring-mybatis.xml中留别名,设置等,这样在mybatis-config.xml中还能有能容,否则就是空文件,不便于理解构架。
原来都是使用sqlSession来执行,现在在xml中使用sqlSessionTemplate,他们是一个东西。spring中有大量的Teamplate存在
在UserMapperImpl类中写方法,并把该类注入到xml的bean中
跟原来纯mybatis比,多了一个实现类,实现类私有了sqlSession,在xml中注入属性
1、编写数据源配置
2、sqlSessionFactory
3、sqlSessionTemplate
4、给接口加实现类
5、将自己写的实现类注入Spring中
6、测试使用
还有另外一个更为简单的方法,让实现类继承SqlSessionDaoSupport,实现UserMapper接口,直接可以GetSqlSession
五、Mybatis事务管理
在xml中先添加事务,再添加切面,切面中引入事务。