spring中级

一、基于注解的方式配置bean/bean的装配

  1. 常用的注解
    @Component:标识为一个组件
    @Repository:标识为一个持久层的组件
    @Service:标识为一个业务层的组件
    @Controller:标识为一个表现层的组件
    @AutoWired:自动装配
    @Qualifier:具体的指定要装配的bean的id值
  2. 开启注解配置
    <context:component-scan base-package="基包"></context:component-scan>
    use-default-filters="true/false":是否使用默认的过滤
    <context:include-filter type="annotation/assignable"expression="注解的全类名/组件类的全类名"/>
    <context:include-filter>需要配合 use-default-fiters="false"来使用
    <context:exclude-filter type="annotation/assignable"expression="注解的全类名/组件类的全类名"/>
    
  3. @AutoWired
    1. 优先匹配兼容的类型来进行注入.如果有多个兼容的类型匹配,则再尝试使用被注入的属性名跟ioc容器中bean的id值进行匹配。
    2. required: 默认情况下,被 @AutoWired 标注的属性必须要被装配.可以使用required="false"来改变默认的行为.
    3. 可以使用@Qualifier来具体指定要装配的bean的id值.

二、AOP

1. 动态代理

  1. 动态代理实现的方式:
    jdk动态代理 基于接口实现代理
    cglib动态代理 基于子类的方式实现代理
    javassist动态代理 基于子类的方式实现代理

  2. jdk的动态代理

    public Object getLoggingProxy(){
    	//定义代理对象
    	Object proxy ;
    	/**
    	 * loader:  ClassLoader 类加载器
    	 * interfaces:  目标类的所接口,目的是获取接口中的方法
    	 * h: InvocationHandler
    	 */
    	ClassLoader loader = proxy.getClass().getClassLoader();
    	Class[] interfaces = proxy.getClass().getInterfaces();
    	InvocationHandler h = new InvocationHandler() {
    		/**
    		 * proxy:代理对象   在invoke方法中一般不会用
    		 * method:正在调用的方法
    		 * args:调用方法传入的参数
    		 */
    		@Override
    		public Object invoke(Object proxy, Method method, Object[] args)
    				throws Throwable {
    			String methodName = method.getName();
    			//加日志
    			System.out.println("ATGUIGU===>The method "+methodName+" begins with "+ Arrays.asList(args));
    			//执行目标方法
    			Object result = method.invoke(proxy, args);
    			//加日志
    			System.out.println("ATGUIGU===>The method "+methodName+" ends with " + result );
    			return result;
    		}
    	};
    	proxy = (Object) Proxy.newProxyInstance(loader, interfaces, h);
    	return proxy ;
    }
    

2.SpringAOP

  1. 切面
    将横切关注点模块化后形成切面.
  2. 通知
    前置通知
    在这里插入图片描述
    后置通知
    在这里插入图片描述
    返回通知
    在这里插入图片描述
    异常通知
    在这里插入图片描述
    环绕通知
    在这里插入图片描述
    3. 基于注解方式配置AOP
    在这里插入图片描述
    4. 基于xml方式配置AOP
    在这里插入图片描述
    1. 切面的优先级
      如果是基于注解的方式,可以使用@Order(值)来指定切面的优先级.值越小优先级越高
      如果是基于xml的方式,可以使用order属性来指定切面的优先级.
    2. 重用切入点表达式
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

Spring 事务管理

1. 基于注解

  1. 配置事务管理器以及开启事务注解
    在这里插入图片描述
    tx:annotation-driven中 transaction-manager的默认值是transactionManager,如果当前事务管理器的id值就是transactionManager,那么transaction-manager的配置可以省略.如果当前事务管理器的id值不是transactionManager,那么就必须在transaction-manager中指定当前的事务管理器的id值。
  2. @Transactional
    该注解可以加到类上,也可以加到方法上。加到类上的对当前类中所有的方法都起作用。如果类与方法上都加了该注解,则方法上的优先于类上的.
  3. 事务的属性
    在这里插入图片描述

基于XML

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值