1、spring的Bean管理(注解方式)
(1)<!-- Spring 的注解开发:组件扫描(类上注解: 可以直接使用属性注入的注解) -->
<context:component-scan base-package="包的全限定名"/>
(2)在相关类上加注解:@Component(value="bean的名称")
2、spring的Bean管理中常用的注解:
(1)@Component:组件(作用在类上)
spring中提供@Component的三个衍生注解:
@Controller:WEB层
@Service:业务层
@Repository:持久层
(2)属性注入的注解(使用注解注入方式可以不用提供set方法)
@Value:用于注入普通类型
@Autowired:自动装配,默认按类型进行装配
@Qualifier:强制使用名称注入
@Resource相当于@Autowired和@Qualifier一起使用
3、AOP的用处?
对程序进行增强:不修改源码的情况下
AOP可以进行权限校验,日志记录,性能监控,事务控制
4、AOP底层实现
代理机制:spring的AOP的底层用到两种代理机制
JDK的动态代理:针对实现了接口的类产生代理
Cglib的动态代理:针对没有实现接口的类产生代理。应用的是底层字节码增强的技术,生成当前类的子类对象。
public class MyCglibProxy implements MethodInterceptor{
private CustomerDao customerDao;
public MyCglibProxy(CustomerDao customerDao){
this.customerDao = customerDao;
}
// 生成代理的方法:
public CustomerDao createProxy(){
// 创建 Cglib 的核心类:
Enhancer enhancer = new Enhancer();
// 设置父类:
enhancer.setSuperclass(CustomerDao.class);
// 设置回调:
enhancer.setCallback(this);
// 生成代理
CustomerDao customerDaoProxy = (CustomerDao) enhancer.create();
return customerDaoProxy;
}
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy
methodProxy) throws Throwable {
if("delete".equals(method.getName())){
Object obj = methodProxy.invokeSuper(proxy, args);
System.out.println("日志记录================");
return obj;
}
return methodProxy.invokeSuper(proxy, args);
}
}
5、AOP开发的相关术语
Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点.
Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类 动态地添加一些方法或 Field.
Target(目标对象):代理的目标对象
Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装在期织入
Proxy(代理) :一个类被 AOP 织入增强后,就产生一个结果代理类
Aspect(切面): 是切入点和通知(引介)的结合
6、通知类型
前置通知:在目标方法之前执行
后置通知:在目标方法之后执行
环绕通知:在目标方法执行前和执行后执行
异常抛出通知:在目标方法执行出现异常的时候执行
最终通知:无论目标方法是否出现异常,最终通知都会执行