spring进阶

目录:

  1. spring概念
  2. ioc和aop
  3. spring事务
  4. spring源码

 

起源:2002年 推出spring雏形 interface21   2004  3.24 正式推出spring1.0版本

目的:解决企业级开应用发决业务逻辑层和其他层的耦合问题

设计理念:是现有技术更加容易使用,整合了现有的技术框架

一个轻量级的  控制反转 和 面向切面编程 的容器框架   (容器:管理应用对象的生命周期,如:bean)

一个轻量级  开源的  javaEE 框架

一个轻量级 非侵入性 的框架 

(侵入性:比如ejb 一个类实现某个功能,需要继承特定的类。

    非侵入式:不需要用户代码引入框架代码的信息,从类的编写者角度来看,察觉不到框架的存在。)

 

IOC:

  1. IOC底层原理
  2. IOC接口(beanFactory)
  3. IOC操作bean管理(基于xml方式)
  4. IOC操作bean管理(基于注解方式)

1、概念

           控制反转:指创建对象的权利有ioc容器来创建
           DI  依赖注入   动态的向某个对象提供它所需要的其他对象。 

           di的底层实现是反射

            DI  是ioc的一种实现方式

            依赖:classa中使用classb的属性或方法,叫a依赖b

    目的:降低耦合度

    原理:

          xml解析、工厂模式、反射

           

2.ioc接口

    

3.ioc的bean管理

    

1》基于xml配置文件方式实现

        

        2.基于xml方式注入属性

               a.使用set方法注入

                        

               b.使用有参构造方法注入

                     

                  

                   

 

===============================================================================================================

ioc的factoryBean:

    1.spring 有俩种类型的bean: 一种普通bean  一种factoryBean(工厂bean)

    2.普通bean:在配置文件中定义bean,class类型就是返回类型。

    3.工厂bean:在配置文件中定义bean, 类型和返回类型可以不一致。

          第一步:创建类,让这个类作为工厂bean,实现接口FactoryBean

          第二部:实现接口中的方法,并定义bean的返回类型。

          

ioc中bean的作用域

    ioc默认 创建 单实例 对象

         

         

    作用域属性: scope:  默认-   singleton  --  单实例

                                              -   prototype  --  多实例

                                              -    request   (不常用)

                                              -    session   (不常用)

      

 

ioc中bean的生命周期

       

      

 

ioc中bean的自动装配

         

       

ioc中bean管理的外部属性文件

        如下示例:

        

 

        

 

===========================================================================================================

 

2》基于注解方式实现

      

 

         

         

       

      

 

      

      

 

      

 

      

 

      

 

 

AOP:

1.概念

        

2.底层原理:动态代理

    1》. 

          第一种 有接口情况,使用 JDK 动态代理 ;创建接口实现类代理对象,增强类的方法
           在这里插入图片描述

 

           具体实现: 调用 newProxyInstance 方法,方法有三个参数:

                                public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
 
​                                  第一参数,类加载器

​                                  第二参数,增强方法所在的类,这个类实现的接口,支持多个接口

​                                  第三参数,实现这个接口 InvocationHandler,创建代理对象,写增强的部分 

                             

//(1)创建接口,定义方法
public interface UserDao {
 public int add(int a,int b);
 public String update(String id);
}

//(2)创建接口实现类,实现方法
public class UserDaoImpl implements UserDao {
 @Override
 public int add(int a, int b) {
 return a+b;
 }
 @Override
 public String update(String id) {
 return id;
 }
}

//(3)使用 Proxy 类创建接口代理对象
public class JDKProxy {
 public static void main(String[] args) {
 //创建接口实现类代理对象
 Class[] interfaces = {UserDao.class};
 UserDaoImpl userDao = new UserDaoImpl(); 
/** 第一参数,类加载器 
	第二参数,增强方法所在的类,这个类实现的接口,(支持多个接口)
	第三参数,实现这个接口 InvocationHandler,创建代理对象,写增强的部分  */
 UserDao dao =(UserDao)Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces,
					new UserDaoProxy(userDao));
 int result = dao.add(1, 2);
 System.out.println("result:"+result);
 }
}

//创建代理对象代码
class UserDaoProxy implements InvocationHandler {
 //1 把创建的是谁的代理对象,把谁传递过来
 //有参数构造传递
 private Object obj;
 public UserDaoProxy(Object obj) {
 this.obj = obj;
 }
 //增强的逻辑
 @Override
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 //方法之前
 System.out.println("方法之前执行...."+method.getName()+" :传递的参数..."+ Arrays.toString(args));
 //被增强的方法执行
 Object res = method.invoke(obj, args);
 //方法之后
 System.out.println("方法之后执行...."+obj);
 return res;
 }
}

 

    2》.没有接口情况,cglib动态代理

         创建当前类的子类的代理对象。

   

==========================================================================================================================

AOP(术语)
     ​ a)连接点:类里面哪些方法可以被增强,这些方法称为连接点

​      b)切入点:实际被真正增强的方法称为切入点

​      c)通知(增强):实际增强的逻辑部分称为通知,且分为以下五种类型:

​                                  1)前置通知 2)后置通知 3)环绕通知 4)异常通知 5)最终通知

​       d)切面:把通知应用到切入点过程 

 

 

 

2、aop  面向切面编程
    aop的实现原理是动态代理:

                                        1、jdk动态代理:JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。
                                        2、CGLIB动态代理:是一个代码生成的类库,可以在运行时动态的生成某个类的子类。

                  CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值