(个人总结)简述--------Spring框架

Spring框架

1. Spring是什么?

  • Spring是分层的javaSE/EE应用的全栈式轻量级开源框架,以Ioc(控制反转)和Aop(面向切面编程)为内核,提供了展现层(SpringMVC)和持久层(SpringJDBC)以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的java EE企业应用开源框架。

2. Spring的优势

  • 方便解耦,简化开发
  • AOP编程的支持
  • 声明式事务的支持
  • 方便程序的调试
  • 方便集成各种优秀框架
  • 降低Java EE API的使用难度
  • java源代码是经典学习的范例

3.IOC(控制反转)

  • 概念:是一种设计思想:将设计好的对象交由容器去处理(而不是传统的在对象内部直接控制),由容器来负责创建及注入依赖对象
  • 作用:减弱程序的耦合
  • DI(依赖注入):是ioc的一部分,由容器动态的将某个依赖关系注入到组件中(利用了java的反射机制)

4.xml配置

  • 1.bean标签
    • 作用:用于配置,让spring来创建对象,并存入ioc容器中
    • 属性
      • id:给对象在容器中提供一个唯一标识,用于获取对象
      • class:指定类的全限定类名,用于反射创建对象,默认情况下调用无参构造函数
      • scope:指定对象的作用范围
        • singleton:默认值,单例的
        • prototype:多例的
        • request:web项目中,spring创建一个bean对象,将对象存入到request域中去
        • session:web项目中,spring创建一个bean对象,将对象存入到session域中去
        • global session:web项目中,应用在Portlet环境(它是基于java的web组件),如果没有此环境,它相当于session
      • init-method:指定类中的初始化方法名称
      • destroy-method:指定类中销毁方法名称
    • 实例化bean的三种方式
      • 1.使用默认无参构造函数
      • 2.使用静态工厂的方法创建对象
      • 使用实例工厂的方法创建对象
<!--  使用构造函数注入创建,默认使用无参构造,如果没有无参构造会报错,所以需要 constructor-arg标签来设置参数  --> 
<bean id="boy" class="com.itlaobing.spring.Boy">        
    <constructor-arg index="0" type="com.itlaobing.spring.IPet" ref="cat">
    </constructor-arg>   
</bean> 

----------------------------------------------------------------------------
<!--方式二:使用静态工厂创建对象    factory-method 属性:指定生产对象的静态方法

 (使用 StaticFactory 类中的静态方法 createAccountService 创建对象,并存入 spring 容器 )-->

   <bean id="boy" class="com.itlaobing.factory.BoyFactory" factory-method="getInstance">
   </bean>
----------------------------------------------------------------
<!-- 此种方式是:    先把工厂的创建交给 spring 来管理。    然后在使用工厂的 bean 来调用里面的方法    factory-bean 属性:用于指定实例工厂 bean 的 id。    factory-method 属性:用于指定实例工厂中创建对象的方法。 -->    
<bean id="boyFactory" class="com.itlaobing.spring.factory.BoyInstanceFactory">
</bean>   
<bean id="boy" factory-bean="boyFactory"  factorymethod="createInstance" lazy-init="false">        
    <property name="pet" ref="cat"></property>    
</bean>
  • 2.加载properties文件
  • 3.配置扫包
<context:property-placeholder location="db.properties">                   </context:property-placeholder>
----------------------------------------------------------
<context:component-scan base-package="com.itlaobing"></context:component-scan>

5.懒加载

  • 延迟加载
    • 概念:在启动spring容器时不实例化bean对象,而是在需要对象时实例化bean对象
<bean id="boyFactory" class="com.itlaobing.spring.factory.BoyInstanceFactory"></bean>  <bean id="boy" factory-bean="boyFactory"  factory-method="createInstance" lazy-init="true">       
     <property name="pet" ref="cat"></property>    
</bean>

6.常见的注解配置

  • 1.创建对象

    • @Component
      • @Component(“value”):创建Bean对象==xml中的bean标签 ,value:指定bean的id,如果不指定value属性,默认bean的id是当前类的类名。首字母小写
      • @Controller(表现层)
      • @Service(业务层)
      • @Repository(持久层)
      • 这些都是@Component的衍生注解,标注方式相同
  • 2.注入数据

    • @Autowired
      • 自动按照类型注入
      • 默认为true,要求依赖对象必须存在,如果允许为空设置(required)= false属性
    • @Resource
    • @Resource:默认按照名称配置
    • 同时配置name和type,name 和type都满足才行
    • 只配置name,只按照name匹配
    • 只配置type,只按照type匹配
    • 都不配置,先按照name匹配,找不到再按照匹配类型(默认)
  • 3.改变作用范围

    • @Scope:指定bean的作用范围
    • value指定范围的值,取值:singleton, prototype, request, session , globalsession
  • 5.其他

    • @PropertySource
    • 加载properties文件== xml中的context:property-placeholder

7.spring注解和xml的选择

  • 注解的优势:配置简单,维护方便(我们找到类,就相当于找到了相应的配置)
  • xml的优势:修改时,不用修改源码,不涉及重新编译和部署

8. @Autowired 和 @Resource的区别

  • 1.@Autowired与@Resource都可以用来装配bean,都可以写在字段上,或者写在setter方法上
  • 2.@Autowired默认按类型装配(这个注解是属于spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置他的required属性为false
  • 3.@Resource(这个注解属于j2ee的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是 ,如果name属性一旦指定,就只会按照名称进行装配

9.整合测试junit

  • 减少重复代码
// 1.使用 ApplicationContext 接口,就是在获取 spring 容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");

  // 2. 获取响应的 bean 对象
AccountServiceImpl accountService =(AccountServiceImpl)applicationContext.getBean("accountService");

10.AOP(面向切面编程)

  • 概念:把程序中重复的代码抽取出来,在执行时,使用动态代理技术,在不修改源码的基础上,对已有的方法进行加强
  • 原理:动态代理
  • 作用:减少重复代码,提高开发效率,方便维护

11.IOC和DI的解释

  • IOC
    • 控制反转时一种设计思想,IOC意味着将你设计好的对象交给容器控制,而不是直接new对象
    • ioc是有专门一个容器来创建这些对象,即由ioc容器来控制对象的创建
    • 反转是由容器来帮忙创建及注入依赖对象,因为由容器帮我们查找及注入依赖对象,对象是被动的接受依赖对象,这就是反转
  • DI
    • DI是IOC的一种实现方式,组件之间依赖关系由容器在运行期决定,形象地说,即由容器动态的将某个依赖对象注入到组件之中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值