8、使用注解开发
如果要使用注解的形式,必须引入aop包
然后在配置文件当中,还得引入一个context约束
8.1 Bean的实现
实现开发中,Bean的注入用到的还是用的是注解,
- 指定扫描包是在application. xml进行配置的,记得要加上约束
2.只需要用一个@component就可以取代之前的bean的写法,把注解写在了dao上
3、测试
8.2 属性注入
如果dao上面你不想写属性
@component包含了三个注解,也可以进行细分,分别表示了对这个类进行一个bean的注入
作用域
小结,xml更加的广泛,注解完成会比较局限化点,超过注解的范围就使用不了,开发比较方便。
如果采用xml和注解的一个形式,进行开发的话,可以不用一开始的注解扫描,但是如果不扫描包的话,就需要手动在xml进行bean注入,所以,根据需求场景进行开发。
8.3配置类
像上面dao直接用一个@component其实就已经可以进行省略xml配置,但是有个弊端,举个例子,@component直接写在dao上对mybaits一些增删改查没毛病,可以用,但是涉及一些复杂的mybatis功能,就必须用到配置类。
配置类的作用就是把xml完全java类化,相当于@configuration定义的类相当于一个xml配置文件,是非常强大的
和上面普通的@component相比,你会发现,@configuration定义的类好像是对这个类进行了实现具体化,可以编写更多的业务代码,算是一个dao的扩展
当然,也可以注入多个配置类
二.AOP
1.底层原理
关于aop的静态代理模式和动态代理模式这边就不做概述了,需要的话可以去设计模式上面看
这边还是举一个实际开发的例子巩固记忆把
需求,就是在增删改查前面都要增加一个日志的实现,比如实际开发中,你可以记录客户的登录时间,登录次数,登录信息等
现在就需要一个代理类实现service接口
上面就是简单的静态代理
这边直接用代码直接看下动态代理吧
用一个租房的例子
动态代理角色
部分是可以照抄的,把看房作为前置通知,收中介费作为后置通知
上面只是一个例子 现在贴一个万能的动态代理,直接拿来用,target就是目标接口
public class ProxyInvocationHandler implements InvocationHandler {
private Object target;
public void setTarget(Object target) {
this.target = target;
}//生成代理类
public Object getProxy() {
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
// proxy : 代理类
// method : 代理类的调用处理程序的方法对象.
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log(method.getName());
Object result = method.invoke(target, args);
return result;
}
public void log(String methodName) {
System.out.println("执行了" + methodName + "方法");
}
}
测试上面的UserServiceImpl
直接用就可以了
2.AOP实战
AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现 程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的 一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使 得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
说下这个图,首先,你要自己生成切面,将切面横切进业务逻辑里面
3.使用AOP
先导包
还是用前面的例子
然后写2个增强类,也就是
最后去spring的文件中注册 , 并实现aop切入实现 , 注意导入约束 .
测试
这里一般我自己是推荐用第三种方式----注解的方式来
3.声明式事务
事务的ACID原则是必须要会的
咱们模拟一个错误,来说明事务的重要性,为什么需要事务
测试
报错:sql异常,delete写错了 结果 :插入成功! 没有进行事务的管理;我们想让他们都成功才成功,有一个失败,就都失败,我们就应该需要事务! 以前我们都需要自己手动管理事务,十分麻烦! 但是Spring给我们提供了事务管理,我们只需要配置即可;
编程式事务和声明式的区别
不管用说明类型的事务,头文件的约束是必须的
JDBC事务
配置好事务管理器后我们需要去配置事务的通知
配置AOP,使得mapper文件里面的所有方法都遵循上面的事务规则
测试