Spring笔记Day02

Spring IOC的注解 笔记

1.@Component :组件

修饰一个类,将这个类交给Spring管理

@Component(“userDao”)

//相当于

有三个衍生注解(功能相似)

​ @Controller;

​ @Service;

​ @Repository;

2.普通属性:

​ @value()

3.对象类型属性:

​ ① @Autowired 设置对象类型的属性值,按照属性类型自动完成属性注入

​ 我们习惯按照名称完成属性注入必须让@Autowired和@Qualifier(value=“”)一起完成对象属性注入

​ ② @Resource(name="")完成对象类型的属性注入,按照名称注入(一般用这个)

4.初始化方法和销毁方法的注解

​ @PostConstruct //初始化

​ @PreDestroy //摧毁

5.Scope作用范围

​ @Scope (默认单例 -singleton)

​ singleton 默认单例

​ prototype 多例

xml和注解开发的比较

需要在xml中 添加context(扫描类上添加的注解)

​ xml适用任何场景

​ 结构清晰,维护方便,一目了然

​ 注解 如果这个类不是自己提供的就不能同注解(源码中的类) 开发编写方便

xml和注解整合方式

xml-bean管理类

注解-属性注入

AOP 面向切面编程

AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面

AOP 是OOP(面向对象编程)的扩展和延伸

由AOP联盟组织提出,Spring是使用这种思想最好的框架

	AOP采用的是**横向抽取机制(代理机制)**取代了传统纵向继承

​ AOP可以进行*权限校验,日志记录,性能监控,事务监控*

Spring底层的AOP实现原理 动态代理

java的动态代理

​ jdk动态代理: 只能对实现接口的类产生daim

​ Cglib动态代理:对没有实现接口的类产生代理,生成子类

深圳

jdk动态代理

1.创建代理creatProxy()

public UserDao creatProxy() {

UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(

​ userDao.getClass().getClassLoader(), //类加载器 定义由那个类加载器加载
​ userDao.getClass().getInterfaces(),接口 给将要代理我俩的对象提供一组什么样的接口

​ this //当前代理对象调用的方法);

​ return userDaoProxy;

}

**2.创建接口 —>**当前代理对象调用的方法 implements InvocationHandler

然后在该接口的方法中执行判断是否增强需要增强的方法

public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
​ if(“save”.equals(arg1.getName())) {
​ //增强
​ System.out.println(arg1.getName()+“已经增强!”);
​ return arg1.invoke(userDao, arg2);
​ }else {
​ System.out.println(arg1.getName()+“没有增强!”);
​ return arg1.invoke(userDao, arg2);
​ }
​ }

InvocationHandler接口:proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都 有一个关联的调用处理程序;在代理实例调用方法时,方法调用被编码分派到调用处理程序的invoke方法。

Proxy.newProxyInstance()方法中三个参数的解释:

Proxy类就是用来创建一个代理对象的类,它提供了很多方法,但是我们最常用的是newProxyInstance方法。

这个方法的作用就是创建一个代理类对象,它接收三个参数,我们来看下几个参数的含义:

​ classloader: 定义了由哪个classloader(类加载器){当前对象的加载器}对象对生成的代理类进行加载
​ interfaces:一个interface对象数组,{当前对象的所有接口}表示我们将要给我们的代理对象提供一组什么样的接口,如果我们提供了这样一个接口对象数组,那么也就是声明了代理类实现了这些接口,代理类就可以调用接口中声明的所有方法。

​ InvocationHandler(this):一个InvocationHandler对象,表示的是当动态代理对象调用方法的时候会关联到哪一个InvocationHandler对象上,并最终由其调用。

1558530063762

Cglib动态代理:
creatProxy

1.创建cglib的核心类对象

2.设置父类

3.设置回调

4.创建代理对象

Spring的AOP的开发(AspectJ的xml方式)

AspectJ是AOP的一个框架,Spring引入AspectJ最为自己的AOP开发

SpringAOP开发方式: Spring基于AspectJ的Aop的开发

JoinPoint:

连接点,可以被拦截到的点(增删改成方法都可以被拦截增强—都是拦截点)

Pointcut:方法层面的增强

切入点,真正被拦截到的点(只对save方法进行增强)

Advice:通知

现在对save方法进行权限校验,权限校验的方法就是通知

1558576545454

aop xml入门开发:

1.引入所有依赖包

2.xml配置 引用aop约束

3.编写目标类 并在xml中配置

4.编写切面类并交给spring管理

5.通过配置完成对目标类产生代理

​ 配置 切入点方法

​ 配置 切面类 (通知)

spring 中通知类型

前置通知:在目标方法执行之前进行操作

​ 获得切入点信息

后置通知:在之后进行操作

​ 获得方法的返回值

环绕通知(事务):之前之后执行操作

环绕通知可以阻止目标方法的执行

异常跑出通知:在程序出现异常的时候进行操作

最终通知:无论代码是否有异常,总会执行

Spring 切入点表达式写法:

[访问修饰符] 方法返回参数 包名.类名.方法名(参数)

*代表任意

对所有DAo中save 加权限校验

(* .DAo. *.save(…)) 通过aop 不需要修改原来的所有代码 添加删除方便

总结以上–

​ Spring的IOC的注解开发

​ 注解的入门

​ 1.引入aop包

​ 2.引入context约束

​ 3.类上注解开发

​ <context:component-scan base-package=“com.dao,Demo2” />

​ 没有类上注解扫描 只用属性注入时context:annotation-config/

​ 4. 类注解、属性注解、scope注解的的名称

​ Spring xml和注解开发的正好 xml(context)

​ Spring aop 动态代理

​ Spring aop基于aspectj的xml开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值