Spring 核心原理

  • 概念

    • 简介:
      • 企业级Java开发最流行的框架
      • 模块化
      • 轻量级
      • 无侵入
    • 特点:
      • 提供IOC机制,实例化对象及管理对象间依赖关系。
      • 提供AOP功能,实现很多特定功能
      • 声明式事务控制处理
      • 提供MVC模式解决方案
      • 提供文件上传、定时器等常用工具类
      • 对其他优秀框架的支持(如:struts、hibernate、MyBatis、Quartz)
  • IOC(DI) 控制反转

    • 原理解析:
      • 控制反转:设计好的类交给系统去控制、而不是由类自己管理。
      • 依赖注入,实现IOC的一种方式,在运行期由容器将依赖关系注入到组件中。
    • 作用:
      • 实例化对象
      • 分析对象的依赖并注入
    • 好处:
      • 降低各个组件之间的耦合度
      • 提高代码的可重用性
      • 便于组件的维护和管理
      • 无侵入,不需要组件实现特定的接口或继承某个类
  • 使用

    • 创建Spring示例项目—copy

      1. 创建项目:maven archetype:generate
      2. 添加依赖:context 、aop、aspectjrt、aspectjweaver
      3. 建类
      4. 配置beans.xml
      5. 调用API
    • 配置方式:XML

       <bean id="userDAO1" class="me.maiz.framework.spring.xml.impl.UserDAOImpl">        			<property name="username" value="wanger" />
       </bean>
       
       <bean id="userService" class="me.maiz.framework.spring.xml.impl.UserServiceImpl">        	<property name="userDAO" ref="userDAO1"/><!--依赖userDAO1bean-->
         <!--示范了如何注入list、map、set等集合属性的值-->
       	<property name=" " ref=""  value="">
       		<list>
                	<value>1</value>
              	<value>2</value>
            	</list>
       		<map></map>
       		<set></set>
       	</property>
       </bean>
      
    • 配置方式:Annotation+包扫描

      添加命名空间---使用idea会自动给你增加这些
      <context:component-scan base-package="me.maiz.framework.spring.anno"/>
      
    • java类替代配置文件+annotation+@bean

      • @Configuration — 表示该类作为配置类替代配置文件的作用
      • @Bean—表示将该类作为一个bean纳入spring容器中管理=等价于配置文件中bean配置项的内容
    • java类替代配置文件+annotation+包扫描

      • @ComponentScan—表示使用包扫描来寻找bean(也就是使用四大组件注解的类)
    • 各自的优缺点:

      • 第一种,完全无侵入–即不会再原类上增加代码
      • 后面几种,有一定的侵入–即增加注解等代码
    • 补充:常用注解

      • 这里任何一个注解都表示将该类纳入容器管理,这里主要是约定或者@ControllerAdvice之类的注解为Controller创建通知。这些就属于切面。
        • @Controller 控制器
        • @Service 服务
        • @Repository 仓库服务DAO
        • @Component 其他组件
      • @Autowired 向容器请求注入一个bean 等价于property的ref和value
      • @Value 用来向类的属性注入值
      • 基于java的配置方式的使用
        • @Bean 表示该方法创建一个springbean,等价于 ,方法名为bean的名字,返回bean的实例
        • @Configuration 表示该类为配置类,等价applicationContext.xml
        • @ConponentScan 表示采用包扫描方式来管理用注解的类
  • AOP

    • 概念
      • 面向切面编程 :将一批逻辑相关性的类视作一个切面,并以切面为单位,添加功能;通常用于实现具备横切性质的系统级服务。是OOP的补充。
      • 应用场景: 具有横切性质的系统级服务
        • 事务==>spring 声明式事务管理
        • 权限验证、
        • 缓存、
        • 懒加载
        • 全局异常处理、
        • 日志追踪,
        • 性能追踪(运行时间)等等
    • AOP的名词
      • 切面Aspect 切面编程的完整定义模块,例如日志切面,包含何时、对准、如何等内容
        • 注:切面非类
      • 连接点Join point 能够植入切入切面的部分,比如方法前后、抛出异常时都可以为连接点,spring支持方法连接点
        • 自然会有连接点—当定义好切入点后,包含当前对象、当前方法的信息抽象为类
          • JoinPoint
          • ProceedingJoinPoint
          • 区别:第二个比第一个多proceed()方法。
      • 通知 要对切面添加的功能代码,比如 安全、事务、日志等功能代码 before/after/around/after-returning/after-throwing
      • 切入点Pointcut 针对那些连接点植入通知,指定具体的拦截地点。可通过SPEL指定连接点。
      • 引入Introduction 对目标类添加新方法及属性
      • 代理 proxy 实现AOP的原理
      • 织入Weaving 把切面应用到目标对象的过程就叫织入
      • 总结:
        • 何时:通知—
        • 何地:哪些类的那些方法 也就是切入点
        • 怎么做:通知 – 配置before、通知方法(处理逻辑的类的方法)、切入点(对那些切入点)
        • 这3个被包含在切面中。
    • AOP的实现-代理
    • 动态代理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值