Spring学习笔记(第二天)

目录

1.什么是aop?

2.aop的实现原理?

3.aop中的名词 

​​4.Spring和Mybatis的整合

5.spring中的事务?

    

1.什么是aop?

Aspect Oriented Programming,面向切面编程,就是将众多的业务模块进行横向切割,提炼抽取其中的相同功能代码进行单独编程,以达到业务代码与非业务功能代码的隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 核心思想就是横向切割,纵向抽取。

2.aop的实现原理?

动态代理

package com.ychs.service;
//第一步先写接口
public interface UserService {
    public void add();
    public int edit(int a);
    public void del();

    public void get();
}



//被代理的对象
public class UserServiceImpl implements UserService {
    @Override
    public void add() {
        System.out.println("添加。。");

    }

    @Override
    public int edit(int a) {
        System.out.println("修改。。。"+a);
        return 0;
    }

    @Override
    public void del() {
        System.out.println("删除。。。。。");
    }

    @Override
    public void get() {
        System.out.println("查询。。。");
    }
}


//生成代理对象
public class UserServiceFactoryProxy {
    //目标对象 被代理的对象
    private UserService userService;
    //获取代理对象
    public UserService getUserServiceProxy(){
        //返回来UserService的子类对象,第一个参数是类加载器
        //第二个参数被代理类实现的接口
        //第三个参数是要增强的代码和执行
        return (UserService) Proxy.newProxyInstance(
                UserServiceFactoryProxy.class.getClassLoader(),
                UserServiceImpl.class.getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("start.....");
                        //中间执行的目标方法,是通过反射
                        Object obj = method.invoke(userService, args);
                        System.out.println("end.......");
                        return obj;
                    }
                }
        );
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}


//编写Test类

 @Test
    public void  f2(){
        UserServiceFactoryProxy userServiceFactoryProxy = new UserServiceFactoryProxy();
        userServiceFactoryProxy.setUserService(new UserServiceImpl());
        //拿到代理对象
        UserService userServiceProxy = userServiceFactoryProxy.getUserServiceProxy();
        userServiceProxy.add();
       int res =  userServiceProxy.edit(2);
        System.out.println("res="+res);
        userServiceProxy.del();

    }

   3.aop中的名词 

          Joinpoint(连接点 ): 在目标对象中,所有可以增强的方法。(edit,add方法)

          Pointcut(切入点):在目标对象中,要增强的方法。(实际增强的方法)

          Advice(增强/通知):增强的代码。(比如:start....,end...)

          通知的类型:1.Before:在目标对象之前执行

                                2.Around:环绕通知  在目标对象之前后之后都会执行

                                3.After-returing:在目标方法之后执行,出行异常不执行

                                4.After-throwing:异常通知,出现异常才执行

                                5.After:目标对象之后执行,不管出没出现异常都执行

          Target(目标对象):被代理对象(userservice)

           Weaving(织入):将通知应用到切入点的过程

            Proxy(代理):将通知织入到目标对象之后,形成代理对象

使用:<aop:config>

<aop:pointcut> expression定义切入点的表达式:   

excution(pulbic * com.ychs.service.UserserviceImpl.add(),      *表示返回任意类型.public可以省略)

要对service层里边所有以ServiceImpl结尾的没有参数的方法做增强* com.ychs.service.*serviceImpl.*()

要对service层里边所有以ServiceImpl结尾的所有的方法做增强* com.ychs.service.*serviceImpl.*(..)

</aop:config>

 如何往目标对象中织入通知?

1.先写要织入的方法

4.  Spring和Mybatis的整合

1.创建maven过程,导入pom文件


<!-- 还有spring的一些核心包-->
<!--    spring和mybatis的整合包和连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.6</version>
    </dependency>

2. 创建maven工程结构

  2.1编写db.properties

 2.2编写SqlMapConfig.xml文件

2.3编写spring和mybaties的整合配置文件

<!-- 连接数据库的信息!-->
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/uolab
user=root
password=123456
  <typeAliases>
        <!--        <typeAlias type="com.ychs.bean.User" alias="user"></typeAlias>-->
        <package name="com.ychs.bean"/>
    </typeAliases>

    <!--    引入的映射文件-->
    <mappers>
        <!--        <mapper resource="org/mybatis/example/BlogMapper.xml"/>-->
        <!--        <mapper resource="com.ychs.mapper"/>-->
        <package name="com.ychs.mapper"/>
    </mappers>

 

5.spring中的事务?

 

 

 

           

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值